0
編輯:這似乎是不可能的,因爲createWriteStream()
和其他錯誤發射器不一定會在下一個滴答發出錯誤,所以這個等待不能完成。實際上,如果我這意味着我想立即完成該過程,所以沒關係,如果我沒有得到任何錯誤。等到所有的回調被執行,然後退出
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()
嘗試過,但不起作用。
只要注意不一定是無效的「無效?」。我不得不創建一個沒有寫入權限的文件來獲取錯誤。 – RayViljoen 2013-02-19 16:19:11
我不能那樣做,因爲執行init和shutdown函數的代碼不是我的,它是用戶的代碼。其實,我發佈的例子是對我的問題的簡化。 – 2013-02-19 16:47:52