在for循环中的findOne()之后无法为对象属性添加值

时间:2018-01-18 16:07:34

标签: javascript node.js mongodb express mongoose

app.get('/calculatePrice', function(req, res) {
  let toyIds = req.query.id,
    qty = req.query.qty,
    totalPrice = 0,
    subtotal = 0,
    result = {"items": [], "totalPrice": totalPrice},
    item = {};

    for (let i = 0; i < toyIds.length; i++) {
        Toy.findOne({id: toyIds[0]}, { id: 1, price: 1, _id: 0 }, function(err, toy) {
        if (toy) {
            item[item] = toy.id; //doesnt work
            item[qty] = qty[0]; //doesnt work
            item[subtotal] = (toy.price * Number(qty[0])); //doesnt work
            totalPrice += item[subtotal]; //doesnt work

        }
    });
    result.items.push(item);
  }
  res.json(result);
});

我试图通过网址“/ calculateprice?id [0] = 1234&amp; qty [0] = 2&amp; id [1] = 1235&amp; qty [1] =提供的各个ToyIds找到mongodb中的特定玩具1和ID [2] = 1236&安培;数量[2] = 5" 。

然而,在找到一个后,我似乎无法使用数据向我的“item”对象属性添加值。

我做了一些研究,我猜它与Toy.findOne有异步,但我真的不明白,似乎无法自己找出解决方案。对noob学习节点/ mongodb的帮助和解释将非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以将循环+ findOne替换为find,然后您需要在回调中移动res.json(result)以使其在您的异步过程完成时运行:

app.get('/calculatePrice', function(req, res) {
    let toyIds = req.query.id;
    let result = { items: [] };
    Toy.find({id: {$in: toyIds}}, function(err, toys) {
        if(err) {
            res.status(500).json({error: true});
        }
        if (toys) {
            // process the result
            // push toys data to result.items
        }
        res.json(result);
    });
});