Napisałem moduł w pliku node.js, który wykonuje niektóre operacje sieciowe. Napisałem mały skrypt wykorzystujący ten moduł (poniżej zmienna check
). Wygląda to tak:node.js: program albo nieoczekiwanie wychodzi, albo po prostu zawiesza się
check(obj, function (err, results) {
// ...
console.log("Check completed");
});
Tutaj jest interesująca rzecz. Kiedy ten kod jest wykonywany jako część testu mocha
, test kończy się zgodnie z oczekiwaniami. Widzę wydruk dziennika i proces się kończy.
Gdy kod zostanie wykonany jako samodzielny skrypt węzła, instrukcja dziennika zostanie wydrukowana, ale proces się zawiesi.
Kiedy próbuję debugować i uruchomić program przy użyciu --debug-brk
i użyć node-inspector
, wychodzi wcześniej! Widzę, że jest wywoływany process.on 'exit'
. Kończy się, podczas gdy niektóre wewnętrzne wywołania zwrotne w module nie są jeszcze wywoływane. Tak więc powyższe zestawienie dziennika nie jest drukowane.
Utknąłem teraz i nie jestem pewien, dlaczego tak się dzieje. Czy ktoś widział podobne zachowanie?
Czy jest jakiś sposób, aby dowiedzieć się, co trzyma węzeł otwarty? – Aishwar
Jeśli masz inspektora węzłów i możesz dołączyć do procesu i ustawić punkt przerwania w pętli zdarzeń węzła, być może. Nigdy nie udało mi się wytropić jednego z nich. Jest to albo oczywiste rzeczy, takie jak otwarcie połączenia DB, ale nigdy jawnie zamknięcia go, lub po prostu wykonaj 'process.exit()' i zabrać się za moje życie. –
process._getActiveHandles() i process._getActiveRequests() patrz http://stackoverflow.com/questions/17960452/how-can-i-get-a-list-callbacks-in-the-node-work-queue -lub-why-wont-node-ex – aaron