我想在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
withPromise.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] 删除。
我来说两句