如何使此代码与异步

时间:2018-04-29 18:36:36

标签: javascript node.js mongodb asynchronous mongoose

router.post("/cart/paycash/add-order",(req,res) => {
    req.checkBody("emri","Ju lutem vendosni emrin").notEmpty();
    req.checkBody("mbiemri","Ju lutem vendosni mbiemrin").notEmpty();
    req.checkBody("numritelefonit","Ju lutem vendosni numrin e telefonit").notEmpty();
    req.checkBody("qyteti","Ju lutem vendosni qytetin").notEmpty();
    var emri = req.body.emri;
    var mbiemri = req.body.mbiemri;
    var telefoni = req.body.numritelefonit;
    var email = req.body.email;
    var qyteti = req.body.qyteti;
    var adresa = req.body.adresa;

    var Cart = req.session.cart;

    var errors = req.validationErrors();
    if(errors) {
        res.redirect("/cart/checkout", {
            errors:errors
        });
    }
    else {
        Orders.find({}, function(err,orders) {
            if(err) {
                console.log(err);
            }
            else {
                var order=new Orders({
                    emri:emri,
                    mbiemri:mbiemri,
                    telefoni:telefoni,
                    email:email,
                    qyteti:qyteti,
                    adresa:adresa,   
                });
                console.log(Cart.length);
                Cart.forEach(function(product) {
                    var cart = Cart.length;
                    var productTitle = product.title;
                    console.log(productTitle);
                    for (var i = 0; i < 1; i++) {
                       Products.findOne({title:product.title}, function(err,foundproduct) {
                           console.log(foundproduct.title)
                           order.products.push(foundproduct);   
                           order.save();;
                        });
                    }
                });
            }
        });

       delete req.session.cart;
        delete req.session.promocode;
        res.redirect("/dyqani");
    }
});

我想让这段代码有效,但为此我需要异步。我尝试了一些方法,但我无法使它工作。谁能帮我?我希望能够在我的订单数据库中添加购物车中的所有产品,但因为mongoose是异步的而JavaScript不是,所以之前加载了一些查询,而我的数据库中的结果不是那些我的车。

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试异步请求购物车中的所有商品。你不需要forEach函数中的嵌套for循环,因为该循环似乎没有做任何事情。

您需要先在数组中映射所有异步请求,然后运行Promise.all以异步方式请求它们

let products = Cart.map((product) => {
    return Products.findOne({title:product.title},(err,foundproduct) => {
      //your save product to order logic
   });
})

Promise.all(products).then((complete) => {
    console.log('product added')
})

这里详细解释了如何在javascript Javascript Promises

中使用promises

您的应用程序设计模式也不常见,但这超出了本问题的范围。