如何在node.js中等待带有异步请求的循环完成?

仓鼠121

我想在node.js中发出多个请求,以获取几个外部API响应,并将它们组合为一个数组。我正在使用for循环来实现这一点。这是我的代码:

res.setHeader('Content-Type', 'application/json');
const sub = req.query.days_subtract;
const enddate = req.query.end_date; 

var array = [];

for (var i = 0; i < sub; i++) {
  request("https://api.nasa.gov/planetary/apod?date=" + subtractDate(enddate, i) + "&api_key=DEMO_KEY", function(error, response, body) {
    array.push(body); 
    // console.log(body);
  });
}
res.send(array);

但是这段代码总是返回[]。我知道这是因为for循环仅启动这些异步请求,但并不等待它们完成。我试图使用async / await,但还是没有用。那么,如何等待该循环完成请求的获取并完成将请求推送到数组以便可以将其显示给用户呢?

阿育·古普塔(Ayush Gupta)

对于您的用例,使用awaitwithPromise.all可能是最有效的解决方法。您的代码应如下所示:

res.setHeader('Content-Type', 'application/json');
const sub = req.query.days_subtract;
const enddate = req.query.end_date;

var promiseArray = [];

for (var i = 0; i < sub; i++) {
    promiseArray.push(new Promise((resolve, reject) => {
        request("https://api.nasa.gov/planetary/apod?date=" + subtractDate(enddate, i) + "&api_key=DEMO_KEY", function(error, response, body) {
        if (error) reject(error);
        else resolve(body)
    })
  }))
}
res.send(await Promise.all(promiseArray));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

你如何等待所有异步调用在Java中完成?

如何在GO中等待POST请求完成?

如何在Selenium IDE中等待所有ajax请求完成?

如何在Node.js中等待所有异步任务完成?

如何在React中等待多个异步等待请求

在JavaScript中等待异步调用在Node js中没有console.log

如何使Jest在期待断言之前等待所有异步代码完成执行

NodeJS:如何在For Loop中等待HTTP Get请求完成?

如何在具有异步查询功能且仅在回调函数中修改了循环条件的Node JS中的while循环中使用条件?

如何在React中等待数据通过异步/等待完成获取

如何将带有异步等待功能的承诺更改为可观察的?

如何等待所有异步完成?

如何在VANILLA JS中等待事件进入循环?

如何进行循环等待所有异步功能完成。异步函数里面有多个异步函数

如何在循环的每次迭代中等待异步操作完成

如何等待所有异步调用完成

如何在带有异步和池的Node中使用Mysql2获取MySQL的insertId?

如何使Parallel等待所有异步任务完成?

循环中的所有异步调用完成后,如何调用函数?

带有异步请求的Node JS Sync工作流程

如何在无限循环中等待函数完成?

Node.js 如何知道所有异步功能何时完成?

如何在 node.js 中等待流式 sql 查询

如何在flutter中等待异步函数完成处理

如何快速退出带有异步函数中数据的for循环?

如何在 js 中使用带有异步/等待和 for 循环的承诺

如何在没有异步/等待的情况下在循环中延迟解决承诺?

如何等待带有承诺的循环完成以执行方法?

如何在内部具有异步等待 api 调用的 Javascript 循环中限制 for?