javascript - 在循环内等待 API 的结果

标签 javascript node.js es6-promise

我是 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/

相关文章:

javascript - 不能直接将 [audio].play() 作为 jQuery 回调

javascript - 从指令调用函数到 Controller

javascript - ReactJS:无法读取未定义的属性 'value'

javascript - 带 Promise 的函数生成器

javascript - 在 for 循环中打破 Promise 链

javascript - 所以我使用 Javascript const 关键字,在 IE 中会发生什么?

javascript - WEB Socket 的 CORS 验证

html - 关于 http-server 与在 NodeJS 中使用 http 的混淆

node.js - 如何在 Nodejs 代理服务器上查询请求?

javascript - 那么如何将数据推送到 promise 中的数组呢?