Ho un'applicazione nodo che è non un'applicazione Web - completa una serie di attività asincrone prima di tornare 1. Immediatamente prima di tornare, i risultati del programma vengono stampati sulla console.Come scrivere una funzione node.js che aspetta un evento prima di "tornare"?
Come si assicura che tutto il lavoro asincrono sia completato prima di tornare? Sono stato in grado di ottenere qualcosa di simile a questo in un'applicazione web assicurandomi che tutte le attività completate prima di chiamare res.end(), ma non ho alcun equivalente per un 'evento' finale da chiamare prima di lasciare il ritorno di uno script.
Vedere sotto per la mia funzione (interrotta) al momento, il tentativo di attendere che callStack sia vuoto. Ho appena scoperto che questo è un tipo di approccio non sensato perché il nodo attende il completamento di processHub prima di immettere una qualsiasi delle funzioni asincrone chiamate in processObjWithRef.
function processHub(hubFileContents){
var callStack = [];
var myNewObj = {};
processObjWithRef(samplePayload, myNewObj, callStack);
while(callStack.length>0){
//do nothing
}
return 1
}
Nota: Ho provato molte volte in precedenza per ottenere questo tipo di comportamento con le librerie come asincrona (vedere la mia domanda relativa al How can I make this call to request in nodejs synchronous?) quindi si prega di prendere la risposta e commenti là in considerazione prima di proporre eventuali risposte sulla base di ' basta usare asynch '.
"Come faccio a essere sicuro tutto il lavoro asincrona viene completata prima di tornare ?" È una domanda priva di senso: il controllo non viene mai restituito alla shell fino a quando non sono state completate tutte le attività asincrone, quindi lasciare l'output della console solo dopo che l'ultima funzione asincrona ha risolto il problema. Grazie a tutti per aver inviato le risposte. – Trindaz