Javascript queue.js是如何工作的?

Javascript queue.js是如何工作的?,javascript,asynchronous,queue,Javascript,Asynchronous,Queue,我一直试图了解它是如何工作的,但我看不出它是如何工作的。我不理解的部分是代码如何继续执行回调。特别是,我不确定pop()方法(第45行)。根据我的理解,该方法采用下一个未处理的延迟函数;追加一个回调,该回调(可能)启动队列中的下一个延迟函数,并在立即弹出的函数完成时执行;然后最后执行所述函数。我的问题是:什么代码执行这个回调 如果我正确理解了代码,queue.await()和queue.awaitall()将回调放在await实例变量中,然后由notify()执行,每个延迟函数实际上不会返回任何

我一直试图了解它是如何工作的,但我看不出它是如何工作的。我不理解的部分是代码如何继续执行回调。特别是,我不确定
pop()
方法(第45行)。根据我的理解,该方法采用下一个未处理的延迟函数;追加一个回调,该回调(可能)启动队列中的下一个延迟函数,并在立即弹出的函数完成时执行;然后最后执行所述函数。我的问题是:什么代码执行这个回调

如果我正确理解了代码,
queue.await()
queue.awaitall()
将回调放在
await
实例变量中,然后由
notify()

执行,每个延迟函数实际上不会返回任何东西——它们应该作为回调执行其最终参数。例如,这将不起作用

var foo = function(i) {
  console.log(i);
  return i;
}
var finished = function(error, results) {
  console.log(results);
}

queue(2)
  .defer(foo, 1)
  .defer(foo, 2)
  .defer(foo, 3)
  .defer(foo, 4)
  .awaitAll(finished);  // only prints "1" and "2", since foo() doesn't execute callbacks
但是,如果我们修改
foo
以接受回调

var foo = function(i, callback) {
  console.log(i);
  callback(null, i);  // first argument is error reason, second is result
}

然后它会继续,因为执行回调会导致队列继续。

这是一些注释很差的代码。@LightnessRacesinOrbit:这是一段非常简短的代码。变量名是描述性的,它们的函数会被注释。我看不出有什么理由对它过度评论…@Bergi:我只是想要一两个。每个函数的功能描述。OP的问题证明了这一点。很好的例子,真的帮助了我