【发布时间】:2016-06-16 04:04:14
【问题描述】:
由于返回 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 是一个返回 promise 的 mongoose 函数,因此在将响应发送回客户端时它不会完全填充数组。
【问题讨论】:
-
“forEach 循环几乎总是会在 promise 返回函数获取或操作的数据完成其数据操作之前完成。” 预期的结果是什么?您可以在问题中加入
js吗? -
每个仍然会执行,可能会在不同的时间返回,但它们仍然是单独的调用。
-
你没有。您使用
map循环,因为forEach仅适用于不返回任何内容的函数。然后,您可以在结果的 promise 数组上使用Promise.all。 -
我添加了特定的代码来显示我正在处理的内容。
-
定义
res、listOfItemIdsAndSaleFrequency、Product
标签: javascript arrays promise