将响应分配给全局变量时,获取未定义

时间:2019-05-23 20:35:18

标签: javascript api promise fetch

我正在尝试将来自api获取调用的响应存储在全局变量中。但是,我将结果存储在其中的变量未定义。

我尝试使用async / await解决此问题,但这种情况似乎没有帮助。我似乎进入了一个状态,其中返回了一个未完成的承诺,但这不是期望的结果。

var obj;

async function getEmails() {

    let url = "https://api2.frontapp.com/inboxes/xxxxxx/conversations?limit=50";

    return fetch(url, {
    body: undefined,
    method: 'GET',
    headers: {
        'Host': 'api2.frontapp.com',
        'Authorization': 'Bearer xxxxxx',
        "Accept": "application/json",
    }
    })
    .then(res => res.json())
    .then(response => {
        obj = response;
    })
}

getEmails();
console.log(obj);

我希望obj返回获取的json数据,但它返回的是undefined。

1 个答案:

答案 0 :(得分:0)

问题是您正在尝试在请求完成之前读取响应。 试试这个:

getEmails().then(() => {
  console.log(obj);
});

,或者使用await关键字:

(async () => {
  var obj;

  async function getEmails() {

      let url = "https://api2.frontapp.com/inboxes/xxxxxx/conversations?limit=50";

      return fetch(url, {
      body: undefined,
      method: 'GET',
      headers: {
          'Host': 'api2.frontapp.com',
          'Authorization': 'Bearer xxxxxx',
          "Accept": "application/json",
      }
      })
      .then(res => res.json())
      .then(response => {
          obj = response;
      })
  }

  await getEmails();
  console.log(obj);
})();