gpt4 book ai didi

javascript - 串联使用 forEach 和 mongoose 的 findById 时出现问题

转载 作者:行者123 更新时间:2023-12-03 06:43:29 24 4
gpt4 key购买 nike

我正在编写一个 Node 路由,该路由应该在向对象添加属性后将对象推送到在 forEach 循环外部声明的数组上。当我在循环内对数组进行 console.log 时,它似乎正在获取数据,但是当我将其返回到客户端时。它是空的。

            var todaysTopItemsBySaleFrequency = [];

listOfItemIdsAndSaleFrequency.forEach((item) => {

Product.findById(item.itemId).then((foundItem) => {

var fullItemData = foundItem.toJSON();

fullItemData.occurrences = item.occurrences;

todaysTopItemsBySaleFrequency.push(fullItemData);

console.log(todaysTopItemsBySaleFrequency);

});

});

return res.status(200).json(todaysTopItemsBySaleFrequency);

console.log 语句显示名为 TodaysTopItemsBySaleFrequency 的数组已正确填充,但为什么当我将其返回给客户端时它是空的?

最佳答案

您传递给 Product.findById(item.itemId).then(...) 的回调函数不会立即调用。您的外部 forEach 完成并在调用任何回调之前返回

Mongoose 的 findById() 方法 returns a promise 。您可以使用Promise.all()等待一系列 Promise 完成,然后设置 res.status(200).json(...)。因为这是异步发生的,所以您还应该提供一个异步接口(interface),例如通过自己返回一个 promise 。

这是一个收集所有响应并返回一个用原始返回值解析的 promise 的版本:

var todaysTopItemsBySaleFrequency = [];

return Promise.all(listOfItemIdsAndSaleFrequency.map((item) => {

return Product.findById(item.itemId).then((foundItem) => {

var fullItemData = foundItem.toJSON();

fullItemData.occurrences = item.occurrences;

todaysTopItemsBySaleFrequency.push(fullItemData);

console.log(todaysTopItemsBySaleFrequency);

});

})).then(() => res.status(200).json(todaysTopItemsBySaleFrequency));

关于javascript - 串联使用 forEach 和 mongoose 的 findById 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com