等到所有回调都被执行然后退出

时间:2013-02-19 15:38:22

标签: node.js

编辑:这似乎无法做到,因为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()但是没有用。

1 个答案:

答案 0 :(得分: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);

});