我想使用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()的参数
发布于 2014-07-04 08:11:18
您的延迟函数需要接受一个callback参数,并在任务完成时使用两个参数调用它:error (如果有的话)和任务执行的结果。
下面是来自自述文件的一个例子
function simpleTask(callback) { // note the callback argument
setTimeout(function() {
callback(null, {answer: 42}); // invoking the callback to indicate task completion
}, 250);
}https://stackoverflow.com/questions/24569450
复制相似问题