我是 Node 新手,我试图理解 Promise,但它有点复杂。 我尝试多次调用 API,然后返回结果。但我的路线首先发送响应。
我只想在完成循环后返回响应
data = {}
req.body.words.forEach(function (word) {
newsapi.v2.everything({
q: word,
domains: req.body.domains.join(', '),
sort_by: 'relevancy'
})
.then(response => {
data[word]=response;
})
});
return res.json(data);
它返回一个空数组。
最佳答案
您的循环是同步的,它正在启动异步调用,但从不等待它们。
您可以使用 Promise.all 并行获取所有结果。或者可以以并行或串行方式使用async-await
。
data = {}
const promises = [];
req.body.words.forEach(function (word) {
const promise = newsapi.v2.everything({
q: word,
domains: req.body.domains.join(', '),
sort_by: 'relevancy'
})
.then(response => {
data[word] = response;
})
promises.push(promise);
});
Promise.all(promises)
.then(()=>{
res.send(data);
})
我已经针对完全相同的问题发表了一篇中等帖子:https://medium.com/trappedpanda/loops-asynchronous-functions-and-returning-collective-results-in-node-js-b7566285fb74
关于javascript - 在循环内等待 API 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56731073/