我想使用队列来执行一长串异步任务。我在文档(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()
的参数?
答案 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);
}