我想在 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 但也不起作用。那么如何等待这个循环完成获取请求并将它们推送到数组以便将其显示给用户呢?
对于您的用例,使用await
with Promise.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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)