如何在 node.js 中检查管道链的完成情况?

Mr *_*old 5 javascript pipe node.js chain

例如,我有这个:

var r = fs.createReadStream('file.txt');
var z = zlib.createGzip();
var w = fs.createWriteStream('file.txt.gz');
r.pipe(z).pipe(w);
Run Code Online (Sandbox Code Playgroud)

我想在 r.pipe(z).pipe(w) 完成后做点什么。我试过这样的事情:

var r = A.pipe(B);
r.on('end', function () { ... });
Run Code Online (Sandbox Code Playgroud)

但它不适用于管道链。我怎样才能让它工作?

Rod*_*ros 5

您正在寻找finish活动。从文档

当 end() 方法已被调用,并且所有数据都已刷新到底层系统时,将发出此事件。

当源流发出 时end,它会调用end()目标,在您的情况下,它是B。所以你可以这样做:

var r = A.pipe(B);
r.on('finish', function () { ... });
Run Code Online (Sandbox Code Playgroud)