2016-05-12 52 views
1

這裏超級煩人的問題。只有fs.createWriteStream上的第一次寫入呼叫按預期工作。只用fs.createWriteStream寫入一次的長命令命令行應用程序

我有這樣的代碼

const errStrmPath = global.testStderrStrmPath = path.resolve(projRoot + '/suman/logs/test-stderr.log'); 
const strm = global.testStderrStrm = fs.createWriteStream(errStrmPath, {flags: 'w'}); 

global._writeTestError = function() { 
    global.checkTestErrorLog = true; 
    strm.write.apply(strm, arguments); 
}; 

global._writeTestError('abc'); 
global._writeTestError('efg'); 
global._writeTestError('hij'); 

因爲它的立場,只寫入日誌文件一次。所以'abc'顯示在文件中,但'efg'和'hij'不顯示。這是一個長期存在的程序,只有在執行了一些異步操作後纔會退出,爲什麼只有第一次寫入文件纔會發生?

任何人都知道什麼可能是錯的?

回答

0

目前,我可以使用同步方法完成我想要的任務,但這種方法不太理想。

如果我改變的global._writeTestError從這個

global._writeTestError = function() { 
    global.checkTestErrorLog = true; 
    strm.write.apply(strm, arguments); // async 
}; 

實施這一

global._writeTestError = function (data) { 
    global.checkTestErrorLog = true; 
    fs.appendFileSync(errStrmPath, data); //now sync 
}; 

枝條同步方法,一切正常。無法使用fs.createWriteStream並在調用process.exit()之前強制刷新它的內容是非常令人沮喪的。有沒有辦法強制流在退出之前刷新所有數據?