Как использовать переменную в обещании? NodeJS - PullRequest
0 голосов
/ 01 мая 2019

Я пишу веб-сайт Shop-Ecomerce.Я хочу добавить товар в свою корзину, поэтому есть два обстоятельства: 1. Товар с таким идентификатором находится в корзине => добавить больше количества (решено) 2. Товар не существует => создать новый Так как проверить, еслипродукт (с определенным идентификатором) существует в корзине?Я использую другую переменную (пусть существует) для проверки, но она, кажется, не работает (из-за обещания, я думаю)

// 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 голосов
/ 01 мая 2019

Эта структура может иметь немного больше смысла - вместо использования карты вы можете отфильтровать массив cart.items, чтобы найти соответствующий продукт.Если это там, увеличьте количество.Если нет, добавьте его в массив или все, что вам нужно сделать.

.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
   })
})
0 голосов
/ 01 мая 2019

Здесь вы можете использовать логическое значение / флаг, чтобы узнать, найден ли предмет.

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
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...