gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:56:34 26 4
gpt4 key购买 nike

我想在 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 但这也不起作用。那么如何等待这个循环完成获取请求并完成将它们推送到数组以便可以显示给用户呢?

最佳答案

对于您的用例,将 awaitPromise.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));

关于node.js - 如何等待带有异步请求的循环在 node.js 中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52724594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com