使用stream.Writable
基類的node.js 0.10,我如何處理消費者調用.end()
的情況,從而發出信號,不再有數據可用?如何處理node.js中的結束信號可寫流?
在the documentationWritable
子類中實現的唯一方法是_write
,但我找不到乾淨的方式來注意輸入已用盡。
使用stream.Writable
基類的node.js 0.10,我如何處理消費者調用.end()
的情況,從而發出信號,不再有數據可用?如何處理node.js中的結束信號可寫流?
在the documentationWritable
子類中實現的唯一方法是_write
,但我找不到乾淨的方式來注意輸入已用盡。
尷尬,爲0.10,節點的stream.Writable
不支持這一個標準,清潔的方式。此問題已在此處討論:https://github.com/joyent/node/issues/7348
在該頁面中提出了幾種解決方法。 TomFrost的flushwritable模塊暫時看起來像是一個可接受的解決方案。
即模塊提供其用於酷似stream.Writable
但支持新_flush
方法消費者調用.end()
之後被調用,但發射的finish
事件之前FlushWritable
類。
考慮你的要求
我怎麼可以處理消費者的呼籲.END(),因此信號沒有更多的數據將是可用的情況下?
,你應該檢查,當你輸入(可讀流)已經結束,而不是你的輸出(你寫流)。所以,在這種情況下,你可以檢查end
事件上的可讀流,如:
readableStream.on('end', function() {
// do what you want with your writable stream, maybe call the end() method
writableStream.end();
});
你甚至可以管可讀流到寫流,如果你不想來管理自己的流:
readableStream.pipe(writableStream);
我正在實施一個可寫入的流。其他數據流正在將數據寫入我的數據庫,可以使用'.pipe()'或直接使用'.write()'。在某個時間點,輸入將被完全刷新,並且我的流將直接或者作爲.pipe()行爲的一部分接收一個'.end()'調用。我希望我的可寫入流能夠檢測到並且例如關閉它正在寫入的文件。 – Alicia 2014-12-04 01:56:38
好的,理解。因此,在這種情況下,一個選項是在您的可寫入流中實現一個方法,該方法接收輸入流作爲參數並檢查它是否已結束,然後關閉文件。 – 2014-12-04 02:04:37