編集:createWriteStream()
および他のエラーエミッターは必ずしも次のティックでエラーを放出しないため、これを行うことは不可能のようです。したがって、この待機は実行できません。実際、それは私shutdown()
がプロセスをすぐに終了したいということを意味するので、エラーが発生しなくても大丈夫です。
var fs = require ("fs");
var s;
var init = function (cb){
cb ();
};
var shutdown = function (cb){
cb (wait);
};
var wait = function (){
//Some kind of wait
process.exit ();
};
init (function (){
s = fs.createWriteStream ("?invalid").on ("error", console.error); //This emits an error
});
shutdown (function (cb){
s.on ("close", function (error){
if (error) console.error (error);
cb ();
});
s.end ();
cb ();
});
このコードを実行すると、エラーが出力される前にプロセスが終了するため、エラーは発生しません。wait()
関数をこれに変更すると、
var wait = function (){
//Some kind of wait
setTimeout (function (){
process.exit ();
}, 1000);
};
エラーが出力され、1秒後にプロセスが終了します。エラーコールバックを待ってから、タイマーを設定せずに終了したいと思います。試しましnextTick()
たが、機能しません。