我一直在尝试了解Mike Bostock's queue.js是如何工作的,但我不明白它是如何工作的。我不理解的部分是代码是如何管理继续执行回调的。特别是,我不确定pop()方法(第45行)。据我所知,该方法获取下一个未处理的延迟函数;附加一个回调,该回调(可能)启动队列中的下一个延迟函数,并在立即弹出的函数结束时执行;最后执行该函数。我的问题是:什么代码执行这个回调?
发布于 2012-12-24 03:42:30
每个延迟函数实际上并不返回任何东西--它们应该以回调的形式执行它们的最后一个参数。例如,这将不起作用。
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
}然后它会继续,因为执行回调会导致queue继续。
发布于 2012-12-23 14:46:33
如果我正确理解了代码,queue.await()和queue.awaitall()将回调放在await实例变量中,然后由notify()执行此操作。
https://stackoverflow.com/questions/14008868
复制相似问题