Javascript forEach循环中的Mongoose promise函数不工作
我正在用Express和Mongoose在Node中编写一个webshop。 猫鼬的模型是“产品”和“项目”。每一件物品都属于一种产品。我想计算产品(库存)的项目,并将此信息提供给视图 问题是res.render部分是在forEach循环完成之前执行的。所以“product.stock”是未定义的Javascript forEach循环中的Mongoose promise函数不工作,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我正在用Express和Mongoose在Node中编写一个webshop。 猫鼬的模型是“产品”和“项目”。每一件物品都属于一种产品。我想计算产品(库存)的项目,并将此信息提供给视图 问题是res.render部分是在forEach循环完成之前执行的。所以“product.stock”是未定义的 exports.getProducts = (req, res, next) => { Product.find() .lean() .then(prod
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
/wait
:
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
,这样您的产品
列表将转换为承诺
列表。然后等待,直到完成所有的承诺
s,这将在为每个产品设置product.stock
时发生。只有这样才会调用res.render()