【问题标题】:stream error handling in pipe - stop the previous stream管道中的流错误处理 - 停止前一个流
【发布时间】:2019-05-18 12:34:12
【问题描述】:

我正在尝试使用管道函数正确处理错误事件。

假设我在 Promise 中有两个流 A(转换 stream.passThrough())和 B(writeStream),代码如下:

new Promise( (resolve, reject) => {
               A.pipe(B).on('error', (err)=>{reject})
                         .on('end', ()=>{resolve})})

上面的代码按预期拒绝了承诺,但是流 A 继续工作。有人可以建议我如何阻止流 A 流动吗?

【问题讨论】:

    标签: javascript node.js typescript stream


    【解决方案1】:

    发生错误时您可以销毁流 A:

    transform.destroy([error]) 销毁流,并发出“错误”。在此调用之后,转换流将释放任何内部资源。实现者不应重写此方法,而应实现 readable._destroy()。 Transform 的 _destroy() 的默认实现也会发出 'close'。

    编辑

    new Promise( (resolve, reject) => {
                   A.pipe(B).on('error', err => { A.destroy(); reject(err); })
                             .on('end',    e => { resolve(e) })
    })
    

    【讨论】:

    • 我试图暂停流,但它仍在流动。 A 是 passThrough 类型的流。
    • 由于passThrough 流是Transform 流的实现,你应该可以调用A.destroy()
    • 仍在流动。难道 bc A 是其他流的结果吗?
    • 我不知道,我会试着调查一下
    猜你喜欢
    • 2016-02-26
    • 2017-07-20
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多