Todo, estoy escribiendo una función de publicación que incluye un bucle for con tres funciones de mangosta anidadas (findOne, findById & create). Sin embargo, parece como si las funciones no se estuvieran completando antes de pasar a la siguiente "i". Esto se evidencia por el hecho de que el archivo console.log de este código nunca es igual a 5. He investigado bastante y entiendo que el problema es que estas funciones de mangosta son asincrónicas, pero todavía tengo que encontrarme con el problema donde las personas tiene tres funciones anidadas como a continuación. ¿Hay alguna forma de permitir que las funciones finalicen antes de avanzar en el ciclo?
¡Gracias!
Por motivos de simplicidad, he puesto i < 5, aunque esto está representado por una variable en mi código. Además, supongamos que el precio es mayor que 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 }De acuerdo con el escenario anterior, lo que entiendo es que desea acceder a ciertas variables fuera de las funciones en un estado como si estas funciones se ejecutaran sincrónicamente.
Puede vincular esas variables a estas funciones y esta ejecución funcionará de la manera que desee que se ejecuten.
Estoy escribiendo un pequeño código que te ayudará a entender el concepto.
for (var i = 0; i < 10; i++) { asynccall("Hello", function (others, err, data) { console.log("Others is same as i in synchrnous call " + others); }.bind(this, i)); }Dado que todas estas llamadas son asincrónicas, básicamente lo hará todo a la vez y no esperará a que finalice ninguna sección. Por lo tanto, probablemente lo esté haciendo fuera de servicio. Para mí es más fácil pensar en ello como un montón de hilos diferentes. Básicamente, es posible que deba pause la parte asíncrona en esta sección si necesita que se ejecute en orden.