1

我将从流中读取一系列输入,并对每个输入执行 HTTP GET 请求。为了避免一次创建太多连接,我使用async.queue将这些输入排队。

在读取所有输入(end发送到流)之后,我想收集以前的结果并生成一个概述。

我目前正在queue.drain为此目的使用。但queue.drain在我的情况下可能会被多次调用,因为进程可能会在输入时被阻塞,并且当这种情况发生时队列将为空。

那么,异步库中是否有任何东西可以确保queue.drain在处理流时只调用一次?只要可以实现此功能,我不介意切换到另一个控制流。

4

1 回答 1

1

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;
  }
});
于 2013-11-22T13:39:20.650 回答