我通过密码流管理多个文件,然后将结果全部写入同一个文件。我可以通过执行src_file_1.pipe(cipher, {end: false}).pipe(dest_file, {end: false});
,src_file_2.pipe(cipher, {end: false}).pipe(dest_file, {end: false});
等来完成此操作,但是我无法关闭dest_file流,因为无法知道密码何时完成写入。如果我没有在链中指定{end: false}
,那么就不可能重复使用密码(重用相同的密码是我的应用程序的要求)。
因此src_file1.on('end', function()...)
是不够的,因为当它运行时,数据可能仍然没有通过密码,dest_file.on('finish, function()...)
是不可能使用的,因为它永远不会触发,除非我没有指定{{1}那么我基本上需要的是一种方法来告诉流链是否已经完成处理其当前负载,而不会结束链中的任何内容。
答案 0 :(得分:0)
所以看起来简短的答案是,如果不严重破坏Node.js流API并继承一些东西,就无法完成。自从从公共API中删除了flush()支持以来,在链中使用管道并期望所有数据通过的唯一方法是结束()链。
就我而言,我依赖于一些我希望保持开放和重用的进度流,但我最终只是使用上次报告的progress.transferred,progress.length,progress.percentage参数重新实例化这些流。 。同样,我每次都必须重新实例化我的密码,因为我重新使用相同的密钥和iv用于我的特定应用程序,结果不是性能瓶颈。