如何在Promise中使用变量?节点JS

时间:2019-05-01 13:18:38

标签: node.js express

我正在写一个商店网站。我想将产品添加到购物车,所以有两种情况 1.具有该ID的产品在购物车中=>增加更多数量(已解决) 2.产品不存在=>创建一个新产品 那么如何检查购物车中是否存在产品(具有特定ID)? 我使用了另一个变量(让它存在)进行检查,但似乎不起作用(由于应许,我想)

// Add product to cart 
router.post('/add', checkToken, (req, res) => {
    let _idProduct = req.body._idProduct;
    let quantity = req.body.quantity;
    let exist = false;
    Cart
        .findOne({ user: req.decoded.userId })
        .exec()
        .then(cart => {
            cart.items.map(item => {
                // Product exist => add more quantity
                if (item.product == _idProduct) {
                    item.quantity += quantity;
                } 
            })
            // How to check if no product with that id in Cart ??
            cart.save(err => console.log(err));
            res.json({
                cart: cart
            })
        })
        .catch(err => { console.log(err)});
})

购物车模型

var Cart = new mongoose.Schema({
    user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
    items: [
        {
            product: { type: mongoose.Schema.Types.ObjectId, ref: 'Product' },
            quantity: { type: Number }
        }
    ],

})

2 个答案:

答案 0 :(得分:0)

您可以在此处使用布尔值/标志来查看是否找到了该项目。

cart.items.map(item => {
   let found = false;  // boolean to see if we found the item
  // Product exist => add more quantity
    if (item.product == _idProduct) {
      item.quantity += quantity;
      found = true;  // if we find an existing item, set the flag to true
    } 
    if (!found){  // if the item isn't found, we can add it to the cart.
       // add item to cart
    }
})

答案 1 :(得分:0)

此结构可能更有意义-您可以过滤cart.items数组以查找匹配的产品,而不是使用map。如果有,增加数量。如果没有,请将其添加到数组或您需要执行的任何操作。

.then(cart => {
   const existingItem = cart.items.filter(item => item.product == _idProduct)[0]
   if(existingItem) existingItem.quantity += quantity
   else { 
      //item does not exist, do what you need to do
   }
   cart.save(err => console.log(err));
   res.json({
     cart: cart
   })
})