Javascript forEach循环中的Mongoose promise函数不工作

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

我正在用Express和Mongoose在Node中编写一个webshop。 猫鼬的模型是“产品”和“项目”。每一件物品都属于一种产品。我想计算产品(库存)的项目,并将此信息提供给视图

问题是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
/
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()