Hay muchas bibliotecas de flujo de control. Utilicé Q en mis proyectos anteriores, lo cual no me molesta, sin embargo, es probable que investigue el uso de la biblioteca asíncrona de caolan para mi próximo proyecto.
https://github.com/caolan/async
De lo que usted ha descrito anteriormente, usted probablemente querrá buscar en el uso de la función paralela
https://github.com/caolan/async#parallel
El problema que usted describe se pueden transferir muy fácilmente hasta el paralelo ejemplo en los documentos
EDITAR: Me olvidé de que las llamadas API dependieran. Siempre que necesite pasar valores a lo largo de la cadena y controlar el orden, necesitará usar el método de cascada (vea la respuesta de qiao). Si hay un caso en el que las llamadas son independientes, usaría el método paralelo. Un ejemplo del método paralelo está por debajo
async.parallel({
google: function(callback){
http.get("http://www.google.com", function(res){
console.log("google done");
callback(null, res.statusCode);
})
},
yahoo: function(callback){
http.get("http://www.yahoo.com", function(res){
console.log("yahoo done");
callback(null, res.statusCode);
})
}
},
function(err, results) {
if(!err){
console.log("all done");
console.log(results.google);
console.log(results.yahoo);
}else{
console.log(err);
}
}
);
Lo que esto hace es hace todas sus peticiones en paralelo y le da una devolución de llamada cuando se puede hacer todo. Aquí es donde debes masajear tus datos.
Lista de bibliotecas de control de flujo:
https://github.com/joyent/node/wiki/Modules#wiki-async-flow
esto es sólo una cuestión general de programación asíncrona. No creo que sea adecuado para stackoverflow porque hay muchas, muchas formas diferentes de abordarlo (fibras, librerías asincrónicas, manejo de eventos).Deberías simplemente usar promesas con la biblioteca de Q terriblemente nombrada pero muy útil. Esta es una respuesta obstinada, así que la dejo como un comentario. Espero ver esta pregunta cerrada AHORA. –
@AndyRay Es bueno que todavía no pueda cerrar las preguntas. – Tomalak
@AndyRay No hay norma para no hacer preguntas generales. Estoy buscando las mejores herramientas, ya que estoy aprendiendo mi camino sobre cómo nodo correcto. Si tiene una respuesta, déjela como una sola. Me alegraría saber más sobre cada una de las soluciones que ofreció, y es posible que obtenga algunos puntos. El cierre de una pregunta porque ya conoce la respuesta a ella late el propósito de todo este sitio :) –