5

Mike Bostock の queue.jsがどのように機能するかを理解しようとしてきましたが、どのように機能するのかわかりません。私が理解していない部分は、コードがコールバックの実行を継続する方法です。特にpop()方法がよくわかりません(45行目)。私の理解では、このメソッドは次の未処理の遅延関数を取ります。キュー内の次の延期された関数を (潜在的に) 開始し、すぐにポップされた関数が終了したときに実行するコールバックを追加します。次に、最後にその関数を実行します。私の質問は、このコールバックを実行するコードは何ですか?

4

2 に答える 2

10

各遅延関数は、実際には何も返しません。最終的な引数をコールバックとして実行することが期待されています。たとえば、これは機能しません

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-23T19:42:29.833 に答える
2

コードを正しく理解し、コールバックをインスタンス変数に入れると、これが によって実行さqueue.await()queue.awaitall()ます。awaitnotify()

于 2012-12-23T06:46:33.363 に答える