【问题标题】:node stream being piped before writing is finished在写入完成之前通过管道传输节点流
【发布时间】:2016-04-29 22:15:08
【问题描述】:

我的缓冲区流在完成将“response.Body”写入其中之前被管道传输,这会引发此错误: Error: write after end at writeAfterEnd

var bufferStream = new stream.PassThrough();
bufferStream.end(response.Body);
        var stream = bufferStream.pipe(fs.createWriteStream(dlFile));
            stream.on('finish', function () {
                console.log('finished writing stream');
                cb(null, response);
            });

我不能使用事件“结束”,因为它是一个 PassThrough 流。如何确保第一个过程完成?

【问题讨论】:

    标签: node.js asynchronous


    【解决方案1】:

    您应该在将数据传输到可写流后写入数据。也就是说bufferStream.pipe 行应该在bufferStream.end 行之前:

    var bufferStream = new stream.PassThrough();    
    // pipe first
    var stream = bufferStream.pipe(fs.createWriteStream(dlFile))
      .on('finish', function () {
        console.log('finished writing stream');
        cb(null, response);
      });
    //now write data
    bufferStream.end(response.Body);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多