如何阻止nodeJS执行for循环外部的语句,直到循环完成?
for(i=0;i<=countFromRequest;i++)
{
REQUEST TO MODEL => then getting result here (its an object)
licensesArray.push(obj.key);
}
res.status(200).send({info:"Done Releasing Bulk Licenses!!!",licensesArray:licensesArray})
问题是For循环之后的语句是在For循环之前执行的,所以在我收到API数据时licensesArray是空的。
有任何线索如何做到这一点?
非常感谢你。
答案 0 :(得分:1)
使用 async / await :
const licensesArray = [];
for(let i = 0; i <= countFromRequest; i++) {
const obj = await requestModel(); // wait for model and get resolved value
licensesArray.push(obj.key);
}
res.status(200).send({licensesArray});
使用Promise.all
:
const pArr = [];
const licensesArray = [];
for(let i = 0; i <= countFromRequest; i++) {
pArr.push(requestModel().then(obj => {
licensesArray.push(obj.key);
}));
}
Promise.all(pArr).then(() => { // wait for all promises to resolve
res.status(200).send({licensesArray});
});
如果您的环境支持,我会选择 async / await ,因为它使事情更容易阅读,并让您使用同步思维模式进行编程(在引擎盖下它仍然是异步的) 。如果您的环境不支持,您可以使用Promise.all
方法。
进一步阅读: