【问题标题】:How to invoke async.map function with an iterator with multiple arguments?如何使用具有多个参数的迭代器调用 async.map 函数?
【发布时间】:2015-12-14 22:46:11
【问题描述】:

我有这个功能:

_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。我怀疑是因为fn 中的return 会误导async.map

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

【问题讨论】:

    标签: node.js http asynchronous node-async


    【解决方案1】:

    return 不会对 async.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
    })
    

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 2020-01-27
      • 2022-10-07
      • 2013-11-14
      • 2011-10-30
      • 2013-06-13
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多