![](/img/trans.png)
[英]javascript promise after foreach loop with multiple mongoose find
[英]Mongoose promise function in forEach Loop is not working
我正在用Express和Mongoose在Node中編寫一個網上商店。 貓鼬模型是“產品”和“項目”。 每個項目都屬於一個產品。 我要計算產品的項目(庫存)並將此信息提供給視圖。
問題是,在完成forEach循環之前執行了res.render部分。 因此,“ 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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.