我有一个可能已经或可能没有结束的流。如果它已经结束,我不想永远坐在那里等待end
事件。我该如何检查?
答案 0 :(得分:4)
如果你绝对必须,你可以检查stream._readableState.ended
,至少在节点0.10和0.12中。这不是公共API,但要小心。显然,所有流也不保证也有这个属性:
值得一读:
答案 1 :(得分:2)
您可能不应该检查,而是附加end
事件侦听器。当流结束时,您将收到end
事件。
如果正确实现了[可读]流,当没有任何内容可供阅读时,您将收到结束事件。对于未结束的开放式流,您可以实现一个活动计时器,以查看自上次可读流以来已经存在多长时间,并在一定时间后决定删除您的侦听器。
(function() {
var timeout = null;
var WAIT_TIME = 10 * 1000; // 10 Sec
function stopListening( ) {
stream.off('data', listener);
}
function listener( data ) {
clearTimeout(timeout);
timeout = setTimeout(stopListening, WAIT_TIME);
// DO STUFF
}
timeout = setTimeout(stopListening, WAIT_TIME);
stream.on('data', listener);
})();
答案 2 :(得分:2)
从节点12.9.0开始,可读流具有readableEnded
属性,您可以检查该属性–请参见readable.readableEnded
in the Stream documentation。
(可写流具有corresponding property)