2014-12-04 51 views

回答

0

尷尬,爲0.10,節點的stream.Writable不支持這一個標準,清潔的方式。此問題已在此處討論:https://github.com/joyent/node/issues/7348

在該頁面中提出了幾種解決方法。 TomFrost的flushwritable模塊暫時看起來像是一個可接受的解決方案。

即模塊提供其用於酷似stream.Writable但支持新_flush方法消費者調用.end()之後被調用,但發射的finish事件之前FlushWritable類。

-1

考慮你的要求

我怎麼可以處理消費者的呼籲.END(),因此信號沒有更多的數據將是可用的情況下?

,你應該檢查,當你輸入(可讀流)已經結束,而不是你的輸出(你寫流)。所以,在這種情況下,你可以檢查end事件上的可讀流,如:

readableStream.on('end', function() { 
    // do what you want with your writable stream, maybe call the end() method 
    writableStream.end(); 
}); 

你甚至可以管可讀流到寫流,如果你不想來管理自己的流:

readableStream.pipe(writableStream); 
+0

我正在實施一個可寫入的流。其他數據流正在將數據寫入我的數據庫,可以使用'.pipe()'或直接使用'.write()'。在某個時間點,輸入將被完全刷新,並且我的流將直接或者作爲.pipe()行爲的一部分接收一個'.end()'調用。我希望我的可寫入流能夠檢測到並且例如關閉它正在寫入的文件。 – Alicia 2014-12-04 01:56:38

+0

好的,理解。因此,在這種情況下,一個選項是在您的可寫入流中實現一個方法,該方法接收輸入流作爲參數並檢查它是否已結束,然後關閉文件。 – 2014-12-04 02:04:37

2

我發現的答案是聽finish事件。

end()方法已被調用,並且所有數據已被刷新到底層系統時,將發出此事件。

我沒有測試過,但我讀這個方式,發出的finish事件之前_write所有調用必須完成。