Nodejs 承诺 async/await 不能正常工作
Posted
技术标签:
【中文标题】Nodejs 承诺 async/await 不能正常工作【英文标题】:Nodejs promise async/await not working properly 【发布时间】:2019-08-25 19:56:20 【问题描述】:在 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);
);
);
【问题讨论】:
是的 rajesh,没问题 尝试在该获取请求上添加一个捕获。也许你遇到了一些错误。 【参考方案1】:let data = await apiCall();
function apiCall()
let options = method:'get';
return fetch('http://example.com/getData', options);
尝试这样,它应该可以正常工作。
【讨论】:
【参考方案2】:这里的这一行,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)
如果你在apiCall
函数中执行return data
,那么结果也会被async
函数包裹在promise
中。所以你必须:
apiCall().then(result => console.log(result))
。再次async/await
使用率高于 ^
【讨论】:
我只在异步方法中使用 await。在这个问题上,我在括号内提到了这一点。我尝试了与您回答的相同的事情。以上是关于Nodejs 承诺 async/await 不能正常工作的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 async/await 的 mongoose 承诺