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 回答