gpt4 book ai didi

javascript - forEach 循环中的 Mongoose Promise 函数不起作用

转载 作者:行者123 更新时间:2023-12-02 23:09:22 26 4
gpt4 key购买 nike

我正在用 Express 和 Mongoose 在 Node 中编写一个网上商店。Mongoose 模型是“产品”和“元素”。每个项目都属于一个产品。我想计算产品(库存)的数量并将此信息提供给 View 。

问题是,res.render 部分在 forEach 循环完成之前执行。所以“product.stock”未定义

exports.getProducts = (req, res, next) => {
Product.find()
.lean()
.then(products => {

products.forEach(product => {
Item.countDocuments({productId: product._id})
.then( count => {
product.stock = count
})
});

res.render('shop/product-list', {
path: '/products',
pageTitle: "All Products",
products: products
})
})
.catch(err => { return next(err) })
};

最佳答案

尝试使用async/await:

exports.getProducts = (req, res, next) => {
Product.find()
.lean()
.then(async (products) => {
await Promise.all(products.map(async (product) => {
product.stock = await Item.countDocuments({productId: product._id});
});

res.render('shop/product-list', {
path: '/products',
pageTitle: "All Products",
products: products
})
})
.catch(err => { return next(err) })
};

我将 forEach 更改为 map,以便将您的 Product 列表转换为 Promise 列表。然后Promise.all等待所有 Promise 完成,这会在为每个产品设置 product.stock 时发生。只有这样 res.render() 才会被调用。

关于javascript - forEach 循环中的 Mongoose Promise 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445440/

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