全部,我正在编写一个post函数,其中包含一个带有三个嵌套mongoose函数的for循环(findOne,findById& create)。但是,在进入下一个“i”之前,似乎功能没有完成。事实证明,这个代码的console.log永远不会等于5.我已经做了大量研究并且理解问题是这些猫鼬函数是异步的,但是我还没有遇到人们的问题有三个嵌套函数,如下所示。有没有办法让这些函数在循环之前完成?
谢谢!
为简单起见,我把i< 5,虽然这是由我的代码中的变量表示的。此外,假设价格大于sellYesPricesMin。
var quantity = 0;
if(price >= sellYesPricesMin){
for (i = 0; i < 5; i ++){
if(price >= sellYesPricesMin && sellYesPricesMin>0){
Order.findOne({"yes_or_no":"NO", "buy_or_sell":"BUY","event.id":req.params.id},function(err, foundOrder){
if(err){
console.log(err);
} else {
User.findById(foundOrder.author.id, function(err, foundUser){
if(err){
console.log( err);
} else {
Share.create({}, function (err, newShare) {
if (err){
console.log(err);
quantity = quantity + 1;
sharesCreated++;
campground.shares.push(newShare);
campground.save();
foundUser.save();
}
});
}
});
}
});
} else {
campground.buyYesPrices.push(parseFloat(Math.round(price * 100) / 100).toFixed(2));
req.user.save();
campground.save();
}
req.user.save();
campground.save();
}
console.log("QUANTITY: " + quantity);
} else {
// BLAH BLAH BLAH
}
答案 0 :(得分:2)
根据上面的场景,我理解的是你想要在一个状态下访问函数外部的某个变量,好像这些函数是同步执行的。
您可以将这些变量绑定到这些函数,这些执行将按您希望的方式执行。
我正在编写一个小代码,可以帮助您理解这个概念。
http.Get("http://oneness287-2.myshopify.com/cart/29741797961:1")
答案 1 :(得分:0)
由于所有这些调用都是异步的,它基本上会一次完成所有这一切,它不会等待任何一个部分完成。因此它可能不按顺序进行。对我来说,它更容易被认为是一堆不同的线程。如果您需要按顺序运行,则可能必须基本上pause
此部分的异步部分。