2016-09-07 2 views
1

Ich habe ein Array von beschreibbaren Streams in einem Schluck-Task. Ich möchte sie zusammenführen und einen Stream zurückgeben. Ich verwende das merge-stream Node-Modul, um dies zu tun. Ich bekomme jedoch den folgenden Fehler.Verschmelzbare Node-Streams in einen Stream verschmelzen

[14:22:56] Error: Cannot pipe, not readable 
    at WriteStream.Writable.pipe (_stream_writable.js:161:22) 
    at add (C:\workspace\mediafly-viewer\desktop\node_modules\merge-stream\index.js:28:12) 
    at Array.forEach (native) 

Werden schreibbare Streams zusammengeführt unterstützt? Wenn ja, wie gehe ich vor?

Hier ist was ich mit Versprechungen versucht.

const promises = streams.map(s => new Promise((resolve, reject) => s.on('finish', resolve).on('error', reject))); 

return Promise.all(promises); 
+0

Sie können keinen unlesbaren (z. B. nur schreibenden) Stream in einen schreibbaren Stream pipen. Würden Sie in Betracht ziehen, einen beschreibbaren Datenstrom in einen "Transform" -Duplex-Stream umzuwandeln, oder ist das nicht möglich? – Mike

+1

Eigentlich bin ich mir nicht sicher. Das Ziel war, benachrichtigt zu werden, wenn alle Streams das Schreiben beendet haben. Ich konnte das mit Versprechungen erledigen, aber es ist nicht sehr sauber. Als eine mögliche Lösung hier veröffentlichen. –

Antwort

0

Das Problem ist, dass jeder Strom merge-stream behandelt als Transform stream, das heißt, es zu callpipe auf dem beschreibbaren Strom versucht, aber beschreibbar Ströme nicht über pipe Methode, nur write. Was Sie tun können, um dies zu beheben, ist entweder Transform streams für Ihre Schreibvorgänge zu verwenden, oder Sie tun dies, indem Sie mithilfe von Promise auf das Ereignis finish warten.

Verwandte Themen