由于返回 Promise 的函数是异步的,因此如何在 forEach 循环内使用它? forEach 循环几乎总是会在 promise 返回函数获取或操作的数据完成其数据操作之前完成。
这是我遇到此问题的一些代码的示例。
var todaysTopItemsBySaleFrequency = [];
listOfItemIdsAndSaleFrequency.forEach((item) => {
Product.findById(item.itemId).then((foundItem) => {
var fullItemData = foundItem.toJSON();
fullItemData.occurrences = item.occurrences;
todaysTopItemsBySaleFrequency.push(fullItemData);
});
});
return res.status(200).json(todaysTopItemsBySaleFrequency);
名为todaysTopItemsBySaleFrequency 的数组被发送回客户端为空。 findById 是一个 Mongoose 函数,它返回一个 promise ,因此当响应发送回客户端时它不会完全填充数组。
最佳答案
您不能使用 forEach
循环,因为它仅适用于不返回任何内容的函数。如果他们返回某些内容或对其做出 promise ,您将必须使用 map
循环。然后,您可以对结果(promise 数组)使用 Promise.all
:
Promise.all(listOfItemIdsAndSaleFrequency.map(item =>
Product.findById(item.itemId).then(foundItem => {
var fullItemData = foundItem.toJSON();
fullItemData.occurrences = item.occurrences;
return fullItemData;
})
)).then(todaysTopItemsBySaleFrequency => {
res.status(200).json(todaysTopItemsBySaleFrequency);
})
关于javascript - 如何使返回 Promise 的函数在 forEach 循环内正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37849709/