如何在NodeJS中为For Loop提供Promise

时间:2017-12-09 18:39:17

标签: javascript node.js mongodb reactjs

如何阻止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是空的。

有任何线索如何做到这一点?

非常感谢你。

1 个答案:

答案 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方法。

进一步阅读: