Il mio script node.js legge righe da una tabella nel database 1, fa un po 'di elaborazione e scrive le righe del database 2.cosa è un buon modo per uscire da uno script node.js dopo "tutto è stato fatto"
Lo script dovrebbe uscire dopo che è stato fatto tutto.
Come posso sapere se è stato eseguito tutto e uscire dal nodo?
Se ho una funzione di callback come questo:
function exit_node() {
process.exit();
}
(Edit: nel frattempo è diventato evidente che process.exit() potrebbe essere anche sostituita con db.Close() - ma questo non è la domanda su cosa mettere lì. La domanda è in che momento esattamente per fare questo, cioè come e dove eseguire questa richiamata.)
Ma non è facile da allegare da qualche parte. Dopo l'ultima lettura da db1 non è corretto, perché l'elaborazione e la scrittura devono ancora avvenire.
Allegarlo alla scrittura su db2 non è facile, perché deve essere allegato dopo l'ultima scrittura, ma ogni scrittura è indipendente e non sa se è l'ultima scrittura.
In teoria potrebbe anche succedere che l'ultima scrittura sia terminata, ma un'altra scrittura prima ancora in esecuzione.
Edit: Scusa, posso vedere la spiegazione della questione non è completa e probabilmente confusa, ma alcune persone ancora capito e ci sono buone risposte qui sotto. Per favore continua a leggere i commenti e le risposte e dovrebbe darti l'intera immagine.
Modifica: Potrei pensare a qualche meccanismo di "blocco" del controller. Le diverse parti dello script aggiungono blocchi al controllore per ogni "lavoro" aperto e le rilasciano dopo che il lavoro è finito, e il controllore esce dallo script quando non sono presenti più bocker. Forse async potrebbe aiutare: https://github.com/caolan/async
Ho anche paura che questo potrebbe far esplodere il codice e la logica irragionevole.
Non capisco la tua domanda. Il nodo * fa * l'uscita quando tutto è fatto. Una volta che non ci sono più chiamate asincrone in corso, una volta che hai finito di elaborare l'ultimo record che hai letto e tutte le tue scritture sono state completate, il nodo uscirà da solo; non devi fare niente di speciale. –
@JoeWhite Molti moduli di database terranno aperta una connessione, mantenendo il processo in esecuzione. Penso che la domanda (correggimi se sbaglio, SHernandez) è come sapere quando il nodo ha terminato con tutti gli IO asincroni relativi ai database, in modo che possa sapere quando chiudere la connessione DB permettendo al processo di uscire. –
Il nodo non si chiude finché non ci sono uno o più callback in attesa o gli emettitori di eventi attivi. Come menzionato @BrandonTilley, alcuni dei moduli DB mantengono aperta la connessione DB (che è EventEmitter), quindi dovresti chiuderla dopo aver terminato le tue query. Quindi nel callback della query scrive qualcosa come 'db.close' (vedi i documenti), i risultati del processo e il nodo usciranno da soli (senza che tu chiami' process.exit'). – elmigranto