0

編集: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()たが、機能しません。

4

1 に答える 1

1

達成しようとしているものの簡略化されたバージョンは次のとおりです。

var fs = require ("fs");
var s;

var init = function (cb){
    cb ();
};

var shutdown = function(error){
    console.log(error);
    process.exit();
};

init(function (){

    s = fs.createWriteStream("?invalid");
    s.on("error", shutdown);
    s.on ("close", shutdown);

});
于 2013-02-19T16:14:54.820 に答える