簡體   English   中英

forEach循環中的貓鼬諾言功能不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM