queue.js并不总是减少活动任务的数量

时间:2014-07-04 08:01:20

标签: javascript task-queue

我想使用队列来执行一长串异步任务。我在文档(https://github.com/mbostock/queue)中尝试过:

var q = queue(1);
tasks.forEach(function(t) { q.defer(t); });
q.awaitAll(function(error, results) { console.log("all done!"); });

但在我的情况下,此代码仅执行第一个任务,awaitAll函数永远不会运行。如果我删除队列参数只留下queue(),意味着无限并行,则所有任务都按预期执行,但awaitAll方法不会运行。 我使用以下代码进行了其他测试:

var q = queue(2); // With or without the parallelism
for (var i = 0; i < 5; i++) q.defer(function (x) {$("#test" + x).text(x);}, i);
q.awaitAll(function (error, results) {alert("all done!");});

您可以在此处使用此代码:http://jsfiddle.net/6p9Vz/(如果您在队列调用中保留并行数的n,则只会更改第一个n div的内容。永远不会出现。)

我打开了队列源代码,问题似乎连接到callback(i)函数,在所有情况下都没有调用,因此active计数器永远不会减少。也许问题是传递给defer()的参数?

1 个答案:

答案 0 :(得分:0)

你的延迟函数需要接受一个callback参数,并在完成任务时用两个参数调用它:error(如果有的话)和执行任务的结果。

以下是readme

的示例
function simpleTask(callback) { // note the callback argument
  setTimeout(function() {
    callback(null, {answer: 42}); // invoking the callback to indicate task completion
  }, 250);
}