【发布时间】:2015-10-17 19:01:24
【问题描述】:
确定是否需要等待process.stdout 上的drain 事件的标准建议是检查它在写入时是否返回false。
我应该如何检查我是否已将另一个流通过管道传输到它?在实际写入所有输出之前,该流似乎可以发出finish。我可以这样做吗?
upstreamOfStdout.on('finish', function(){
if(!process.stdout.write('')) {
process.stdout.on('drain', function() { done("I'm done"); });
}
else {
done("I'm done");
}
});
upstreamOfStdout.pipe(process.stdout);
我更喜欢不依赖于任何流内部的答案。刚刚考虑到流符合节点流接口,那么规范的方法是什么?
编辑:
更大的上下文是一个包装器:
new Promise(function(resolve, reject){
stream.on(<some-event>, resolve);
... (perhaps something else here?)
});
其中stream 可以是process.stdout 或其他东西,其中有另一个直通流通过管道输送到其中。
每当调用resolve 时,我的程序都会退出——我假设Promise 代码会保持程序处于活动状态,直到所有承诺都得到解决。
我已经多次遇到这种情况,并且一直使用 hack 来解决问题(例如,process.stdout 中有几个私人成员很有用。)但我真的很想一劳永逸地解决这个问题(或知道这是一个错误,因此我至少可以跟踪问题并在解决问题时修复我的 hack):我如何判断另一个流下游的流何时完成处理其输入?
【问题讨论】: