Node.js承诺异步/等待无法正常工作

时间:2019-04-04 06:51:37

标签: node.js api promise async-await

没有在promise方法中获得3500条记录的api响应。如果我使用setTimeout()调用api,则它可以正常工作并获取所有数据。

请在下面找到示例代码(仅在异步方法中调用apiCall)

let data = await apiCall();

function apiCall(){
   return new Promise((resolve,reject)=>{
      let options = {method:'get'}
      fetch('http://example.com/getData',options).then(data => {
         resolve(data);
      });
   });
}

2 个答案:

答案 0 :(得分:1)

let data = await apiCall();

function apiCall(){
   let options = {method:'get'};
   return fetch('http://example.com/getData', options);
}

尝试这样,它应该可以正常工作。

答案 1 :(得分:0)

如果您不在let data = await apiCall();函数内部调用,则此行async无效,因为await仅在async函数内部有效。

使用async/await的正确语法是:

async function myFunc() {
  let result = await getSomething()
  ...
}

另外fetch API也支持Promise,因此在您的代码中您可以执行以下操作:

// note async keyword
async function apiCall(){
  let options = {method:'get'}
  try {
    let response = await fetch('http://example.com/getData',options) // response is also a promise so
    let data = await response.json(); // data contains the result
    console.log(data);
  } catch (err) {
    console.error(err)
  }
}

假设您在return data函数中进行了apiCall,则结果也将由promise函数包装在async中。因此,您必须:

apiCall().then(result => console.log(result))。同样,async/await的使用率高于^