首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >queue.js并不总是减少活动任务的数量。

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

Stack Overflow用户
提问于 2014-07-04 08:01:20
回答 1查看 52关注 0票数 3

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

代码语言:javascript
复制
var q = queue(1);
tasks.forEach(function(t) { q.defer(t); });
q.awaitAll(function(error, results) { console.log("all done!"); });

但是在我的例子中,这段代码只执行第一个任务,awaitAll函数永远不会运行。如果删除只留下queue()的队列参数,即无限并行性,那么所有任务都会按预期执行,但awaitAll方法不会运行。我使用以下代码进行了其他测试:

代码语言:javascript
复制
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()的参数

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-04 08:11:18

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

下面是来自自述文件的一个例子

代码语言:javascript
复制
function simpleTask(callback) { // note the callback argument
  setTimeout(function() {
    callback(null, {answer: 42}); // invoking the callback to indicate task completion
  }, 250);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24569450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档