Ho scritto un modulo in node.js che esegue alcune operazioni di rete. Ho scritto un piccolo script che utilizza questo modulo (la variabile check
di seguito). Assomiglia a questo:node.js: il programma si chiude in modo imprevisto o si blocca semplicemente
check(obj, function (err, results) {
// ...
console.log("Check completed");
});
Ora ecco la cosa interessante. Quando questo codice viene eseguito come parte di un test mocha
, il test termina come previsto. Vedo la dichiarazione del registro stampata e il processo termina.
Quando il codice viene eseguito come script nodo autonomo, l'istruzione del registro viene stampata, ma il processo si blocca.
Quando provo a eseguire il debug e avvio il programma utilizzando --debug-brk
e utilizzo node-inspector
, si esce presto! Vedo che viene chiamato process.on 'exit'
. Esce mentre alcuni callback interni al modulo non sono stati ancora chiamati. Quindi la dichiarazione di registro qui sopra non viene stampata neanche.
Sono bloccato e non sono sicuro del motivo per cui questo sta accadendo. Qualcuno ha visto un comportamento simile?
C'è qualche modo per scoprire cosa mantiene aperto il nodo? – Aishwar
Se si dispone di ispettore nodo e si può collegare al processo e impostare un punto di interruzione nel codice del ciclo di eventi del nodo, forse. Non ho mai seguito correttamente uno di questi. È ovvio che cose come aprire una connessione DB ma non chiuderlo mai esplicitamente, o faccio semplicemente 'process.exit()' e andare avanti con la mia vita. –
process._getActiveHandles() e process._getActiveRequests() vedere http://stackoverflow.com/questions/17960452/how-can-i-get-a-list-of-callbacks-in-the-node-work-queue -o-perché-wont-node-ex – aaron