【问题标题】:How does queue.js work?queue.js 是如何工作的?
【发布时间】:2012-12-10 03:20:35
【问题描述】:

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

【问题讨论】:

  • 那是一些注释很差的代码。
  • @LightnessRacesinOrbit:这是一个非常简短的代码。变量名称是描述性的,它们的功能是注释的。我认为没有理由过度评论它......
  • @Bergi:我只要求一两个。描述每个函数的作用。 OP 的问题证明了这种需求。

标签: javascript asynchronous queue


【解决方案1】:

每个延迟函数实际上并不返回任何东西——它们被期望以回调的形式执行它们的最终参数。例如,这将不起作用

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 继续。

【讨论】:

  • 很好的例子,对我很有帮助
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2016-11-13
    • 2017-10-11
    • 2021-10-13
    • 2011-02-24
    相关资源
    最近更新 更多