【问题标题】:Merging writable node streams into one stream将可写节点流合并为一个流
【发布时间】:2017-01-15 14:28:40
【问题描述】:

我在 gulp 任务中有一组可写流。我想合并它们并返回一个流。我正在使用合并流节点模块来执行此操作。我收到以下错误。

[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)

是否支持合并可写流?如果是这样,我该怎么做?

这是我尝试过的承诺。

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

return Promise.all(promises);

【问题讨论】:

  • 您不能将不可读(例如只写)流通过管道传输到可写流中。您会考虑将一个可写流转换为transform(双工)流还是不可能?
  • 其实我也不确定。目标是在所有流完成写入时得到通知。我能够通过承诺完成这项工作,但它不是很干净。在这里发布它作为可能的解决方案。

标签: node.js gulp node.js-stream


【解决方案1】:

问题在于merge-stream将每个流视为Transform stream,即它尝试在可写流上callpipe,但可写流没有pipe方法,只有write。解决此问题的方法是使用 Transform streams 进行写入,或者使用 Promise 等待 finish 事件来执行您已完成的操作。

【讨论】:

  • 您能举个例子说明如何将写入流(如 fs.createWriteStream)变成可读流吗?
猜你喜欢
  • 2019-04-16
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2014-03-13
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多