Node.js流API和AWS S3

时间:2019-07-14 19:38:09

标签: node.js amazon-s3 node-streams

我绝对对NodeJS流API感到困惑。我正在尝试建立具有相互连接的几个流的管道。看起来像这样:

S3ReadStream -> ParseTransform -> PassThrough -> CustomFilter -> Serializer -> PassThrough

我遇到的问题是错误/完成处理。通常,我尝试使用stream.pipeline()而不是readable.pipe(writable)

例如,当我研究.upload的S3 nodejs SDK的源代码时,我发现managed_upload.js以这种方式处理事件:error导致清理,readable导致耗尽和end导致提交。对我来说,这看起来很直观。 https://github.com/aws/aws-sdk-js/blob/v2.391.0/lib/s3/managed_upload.js#L185

问题是,例如,当我使用.pipelineerror出现在ParseStream中时,错误不会传播到其他流(调用错误不会导致错误,导致错误的{ {1}}。

可以看到从未设置closehttps://github.com/nodejs/node/blob/v10.15.3/lib/internal/streams/end-of-stream.js#L78

虽然在这里可以看到该驱逐舰始终被正确调用 https://github.com/nodejs/node/blob/v10.15.3/lib/internal/streams/pipeline.js#L81

此外,如下面的代码所示,opts.error似乎并未在最后一个可写流上调用.pipeline

end

可能只是我一个人,但是在阅读official docs about之后,它与我所经历的行为或我在代码中看到的行为都不相符。

是否存在一种可靠,简单的方法来如何通过管道传播错误,即每当管道中任何地方发生错误时,所有流都会出错,从而尝试“清除”或“恢复”?也许有一个图书馆可以构建不包含大量隐藏陷阱的“直观”管道,还是我需要通过认真处理所有事件来照顾每一个流?

0 个答案:

没有答案