【问题标题】:Pass parameter to async.js task将参数传递给 async.js 任务
【发布时间】:2016-07-21 14:52:25
【问题描述】:

我必须遍历给定的 JSON 对象并为其中的每个对象创建一个任务。给定的任务也需要来自这个 JSON 对象的信息,我想知道如何将这些信息传递给我的任务,以便在执行时可用。

构建我的任务数组:

var asyncScrapeTasks = [];
var resources = JSON.parse(body);
for(var i=0; i<resources.items.length; i++)
{
    asyncScrapeTasks.push(function (callback)
    {
        console.log(resources.items[i].id);
    });
}

执行我的任务:

async.parallelLimit(asyncScrapeTasks, 5, function() {
    callback(null, "Done");
});

我的问题:

现在console.log(resources.items[i].id); 返回 undefined,这对我来说很有意义,因为在执行函数时索引 i 是未知的,但我想知道如何解决我的问题。

【问题讨论】:

  • 您的代码有点不完整,因为 console.log 不是异步函数。你能举一个更具体的例子来说明你正在尝试做什么吗?
  • @slebetman 是的,我试图尽可能地简化它。基本上我想从外部 URL 获取一个 json 对象并从这个 json 文件中获取特定信息,以便将其存储在我自己的数据库中。
  • 但是根据示例,您的评论 because resources i not known at the time the functions being executed 毫无意义。如果这确实是发生的事情,那么您发布的示例是错误的(您已将其简化到完全消除了问题)
  • @slebetman 你是对的,我已经弄清楚问题是什么,但我仍然不知道如何解决它。我已经更新了我原来的问题。它是关于我的迭代索引而不是变量资源。

标签: javascript node.js async.js


【解决方案1】:

由于我没有足够的声誉来添加评论,所以我正在写作为答案。抱歉。

使用 paralleLimit 有什么特别的原因吗? async.js 每个都可以迭代集合并对每个项目执行操作。此函数将函数 iteratee 并行应用于集合中的每个项目。 async.js each

如果要限制操作: async.js eachLimit

【讨论】:

  • 我不是 100% 相信我得到了每个和并行之间的主要区别?我刚刚读到并行正在启动并行 I/O 任务,这正是我正在做的事情,因为我通过对外部网络服务器的 URL 调用请求信息。我认为你的意思是我可以直接迭代 resource.items.eachLimit,这是正确的吗?我是 async.js 的新手
  • 是的,你可以使用eachLimit,在iteratee中你可以调用你的rest api。 asyc.js Documentation 描述了其他风格,并在每个示例下方提供了源链接。
猜你喜欢
  • 2015-04-16
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多