我将从流中读取一系列输入,并对每个输入执行HTTP GET请求。为避免一次创建太多连接,我使用async.queue将这些输入排队。
读取所有输入(将end
发送到流)之后,我想收集以前的结果并生成概述。
我目前正在为此使用queue.drain
。但是在我的情况下,可能会多次调用queue.drain
,因为该过程可能在输入时被阻塞,并且在发生这种情况时队列将为空。
因此,异步库中是否有任何东西可以确保在处理流时仅queue.drain
调用一次?我不介意切换到另一个控制流程,只要可以实现此功能。
最佳答案
在可读流上收到drain
事件时,只需添加end
处理程序。
var s = new SomeReadableStream();
var q = queue(your_callback, 1);
s.on('end', function() {
// Beware: if the queue is already empty, the drain callback will never be called,
// we have to check this by ourselves
if (q.running() === 0 && q.length() === 0) {
drain_cb();
}
else {
q.drain = drain_cb;
}
});