5

我有一个流可能已经结束,也可能还没有结束。如果它已经结束,我不想永远坐在那里等待end事件。我该如何检查?

4

3 回答 3

4

如果你绝对需要,你可以检查stream._readableState.ended,至少在节点 0.10 和 0.12 中。不过这不是公共 API,所以要小心。同样显然所有流也不能保证具有此属性:

值得一读:

https://github.com/hapijs/hapi/issues/2368

https://github.com/nodejs/node/issues/445

于 2015-08-27T22:41:56.903 回答
4

从节点 12.9.0 开始,可读流具有readableEnded您可以检查的属性——请参阅readable.readableEndedStream 文档

(可写流有相应的属性

于 2020-09-10T20:31:23.853 回答
3

您可能不应该检查,而是附加一个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);
})();
于 2015-08-27T22:35:35.490 回答