如何使用带有多个参数的迭代器调用async.map函数?

时间:2015-09-17 22:27:48

标签: node.js http asynchronous node-async

我有这个功能:

_get(url, param, function(err, body, res) {
  /* do something */
});

我需要多次执行此函数,其中param每次迭代都会采用不同的值。param来自数组)

所以,我决定尝试使用文档中所述的async.map来定义:

  

map(arr,iterator,[callback])

iterator需要iterator(item, callback)之类的地方 所以,此刻我发现我的功能不兼容,所以就此而言我尝试解决这个问题

var fn = function(param, callback) {
  return _get(url, param, callback);
};

当我用async.map执行时,我希望得到像这样的合并结果

async.map(scope, fn, function(err, results) {
  /* handle results */
});

results会返回undefined。我怀疑是因为returnfn误导了async.map

我应该在这里更改/更正?

1 个答案:

答案 0 :(得分:1)

returnasync.map没有任何影响。我认为问题在于回调的签名。 假设scope是您拥有param值的数组,以下内容应该在这些值上运行您的函数并在results中提供一个数组 - 假设_get调用其匿名回调没有错误:

async.map(scope, function(param, cb) {

   _get(url, param, function(err, body, res) {
       if (err) return cb(err);
       /* do something */
       cb(null, /* whatever you want to pass on to final callback */);
   })
},
function(err, result) {
   if (err) // handle err

   // result is array of values from _get's callback
})