从API调用后从Promise返回数据并将其存储在变量中

时间:2019-10-26 14:44:22

标签: javascript promise es6-promise

我对Promises还是很陌生,在这里找到了许多示例,这些示例说明如何使用console.log来访问实际值。但是我的目标是将结果存储在变量中并使用它。

getdata = () =>
  fetch(
    "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full&apikey=demo"
  )
    .then(response => {
      if (response.status === 200) {
        return response.json();
      } else {
        throw new Error("This is an error");
      }
    })
    .then(data => {
      console.log(data);
    });

getdata();

此代码有效。您能帮我重写一下吗?getdata()函数允许我将结果存储在变量中。退货不起作用,因为我将收到另一个待处理的Promise。

2 个答案:

答案 0 :(得分:2)

您可以这样做:

getdata = () =>
  fetch(
    "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full&apikey=demo"
  ).then(response => {
    if (response.status === 200) {
      return response.json();
    } else {
      throw new Error("This is an error");
    }
  });

getdata().then(data => {
  //I can do whatever with data
});

当然,您还希望处理请求失败的情况,因此也可以链接.catch()。另外,如果您为其配置了构建过程,则可以使用asyncawait来做到:

try {
  const data = await getdata();
} catch(err) {
}

这需要在标记为async的函数中使用

答案 1 :(得分:0)

首先,我们需要声明一个变量,例如temp。然后使用提取API请求带有URL的查询。如果服务器状态为200,则它将返回一个Promise,我们需要使用then方法,先传递任何参数(res,response,r any ...),然后传递一个胖箭头函数(=>)这样我们就可以将响应设为json格式。之后,我们需要使用另一个then方法来返回json输出并将该值分配给我们声明的temp变量。

但是,如果发生任何错误(例如500、400、404服务器错误),我们需要使用带有错误参数的catch方法并对其进行调试。

let temp;

fetch('https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full&apikey=demo')
    .then(res => res.json())
    .then(data => temp = data)
    .catch(err => console.log(err));