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的问题证明了这一点。很好的例子,真的帮助了我