Node.js 如何测试流是否已结束?
我有一条小溪,可能已经结束,也可能还没有结束。如果它已经结束,我不想永远坐在那里等待Node.js 如何测试流是否已结束?,node.js,node.js-stream,Node.js,Node.js Stream,我有一条小溪,可能已经结束,也可能还没有结束。如果它已经结束,我不想永远坐在那里等待end事件。如何检查?您可能不应该检查,而是附加一个end事件侦听器。当流结束时,您将获得一个end事件 如果[readable]流实现正确,则在没有剩余内容可读取时,您将获得一个end事件。对于没有结束的开放式流,您可以实现一个活动计时器,以查看流上次可读的时间,并在一定时间后决定删除侦听器 (function() { var timeout = null; var WAIT_TIME = 10
end
事件。如何检查?您可能不应该检查,而是附加一个end
事件侦听器。当流结束时,您将获得一个end
事件
如果[readable]流实现正确,则在没有剩余内容可读取时,您将获得一个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);
})();
如果必须这样做,您可以至少在节点0.10和0.12中检查
stream.\u readableState.end
。虽然这不是公共API,但要小心。显然,所有流也不能保证具有此属性:
值得一读的是:
从节点12.9.0开始,可读流具有可检查的
readableEnded
属性–请参阅
(可写流有一个)在
end
事件发生之前,我没有访问流的权限。您可以将输入流导入一个新流。可读,并将侦听器连接到包装器。然后您不必担心它是否有数据,只需附加事件处理程序来处理这两个实例。