node.jsにネットワーク操作を実行するモジュールを作成しました。私はこのモジュール(以下の変数check
)を使用する小さなスクリプトを書いた。これは次のようになります。node.js:プログラムが予期せず終了するか、ハングするだけです
check(obj, function (err, results) {
// ...
console.log("Check completed");
});
ここに興味深いものがあります。このコードをmocha
テストの一部として実行すると、テストは期待どおりに終了します。ログステートメントが表示され、プロセスが終了します。
コードをスタンドアロンノードスクリプトとして実行すると、logステートメントが出力されますが、プロセスはハングアップします。
デバッグしようとしたときに、--debug-brk
を使用してプログラムを起動し、node-inspector
を使用すると、早く終了します。 process.on 'exit'
が呼び出されているのがわかります。モジュール内の内部コールバックがまだ呼び出されていない間に終了します。したがって、上記のログ文も出力されません。
私は今停止しており、なぜこれが起こっているのか分かりません。誰も同様の行動を見たことがありますか?
ノードを開いたままにしていることを確認する方法はありますか。 – Aishwar
ノードインスペクタがあり、プロセスにアタッチし、ノードのイベントループコードにブレークポイントを設定することができます。私はこれらの1つを正常に追跡したことはありません。 DB接続をオープンして明示的にクローズしたり、process.exit()を実行して自分の人生を変えたりするのは明らかです。 –
process._getActiveHandles()およびprocess._getActiveRequests()を参照してください。http://stackoverflow.com/questions/17960452/how-can-i-get-a-list-of-callbacks-in-the-node-work-queue -or-why-wont-node-ex – aaron