Tengo una aplicación nodo que es no una aplicación web - completa una serie de tareas asíncronas antes de regresar 1. Inmediatamente antes de regresar, los resultados del programa se imprimen en la consola.Cómo escribir una función node.js que espera a que un evento se active antes de 'regresar'?
¿Cómo me aseguro de que todo el trabajo asíncrono se complete antes de volver? Pude lograr algo similar a esto en una aplicación web asegurándome de todas las tareas que completé antes de llamar a res.end(), pero no tengo ningún equivalente para un 'evento' final al que llamar antes de permitir el retorno de un script.
Véase más abajo para mi función (roto) Actualmente, tratando de esperar hasta que la pila de llamadas está vacía. Acabo de descubrir que este es un tipo de enfoque sin sentido porque el nodo espera que processHub se complete antes de ingresar a cualquiera de las funciones asincrónicas llamadas en processObjWithRef.
function processHub(hubFileContents){
var callStack = [];
var myNewObj = {};
processObjWithRef(samplePayload, myNewObj, callStack);
while(callStack.length>0){
//do nothing
}
return 1
}
Nota: He intentado muchas veces anteriormente para lograr este tipo de comportamiento con las bibliotecas como asíncrono (véase mi pregunta relacionada a How can I make this call to request in nodejs synchronous?) así que por favor tome la respuesta y los comentarios allí en cuenta antes de sugerir ninguna respuesta basada en la " solo usa asynch '.
"¿Cómo me aseguro de que todo el trabajo asíncrono se completa antes de volver ? " Es una pregunta sin sentido: nunca se devuelve el control al shell hasta que se hayan completado todas las tareas asíncronas, por lo que la salida de la consola hasta después de que la última función asíncrona haya terminado solucionó mi problema. Gracias a todos por enviar respuestas. – Trindaz