如何测试流是否已结束?
How do I test if a stream has ended?
我有一个可能已经结束也可能还没有结束的流。如果它已经结束,我不想永远坐在那里等待 end
事件。我该如何检查?
您可能不应该检查,而是附加一个 end
事件侦听器。当直播结束时,您将收到一个 end
事件。
如果 [readable] 流被正确实现,当没有任何内容可读时,您将得到一个结束事件。对于没有结束的开放式流,您可以实现一个 activity 计时器来查看自上次流可读以来已经过了多长时间,并在一定时间后决定删除您的侦听器。
(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);
})();
如果绝对必要,您可以检查 stream._readableState.ended
,至少在节点 0.10 和 0.12 中。这不是 public API 不过要小心。同样显然所有的流都不能保证也有这个 属性:
值得一读:
从节点 12.9.0 开始,可读流有一个 readableEnded
属性 您可以检查 – 参见 readable.readableEnded
in the Stream documentation.
(可写流有 corresponding property)
我有一个可能已经结束也可能还没有结束的流。如果它已经结束,我不想永远坐在那里等待 end
事件。我该如何检查?
您可能不应该检查,而是附加一个 end
事件侦听器。当直播结束时,您将收到一个 end
事件。
如果 [readable] 流被正确实现,当没有任何内容可读时,您将得到一个结束事件。对于没有结束的开放式流,您可以实现一个 activity 计时器来查看自上次流可读以来已经过了多长时间,并在一定时间后决定删除您的侦听器。
(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);
})();
如果绝对必要,您可以检查 stream._readableState.ended
,至少在节点 0.10 和 0.12 中。这不是 public API 不过要小心。同样显然所有的流都不能保证也有这个 属性:
值得一读:
从节点 12.9.0 开始,可读流有一个 readableEnded
属性 您可以检查 – 参见 readable.readableEnded
in the Stream documentation.
(可写流有 corresponding property)