【问题标题】:Insert functions via for loop to async [duplicate]通过for循环将函数插入到异步[重复]
【发布时间】:2014-03-03 21:54:20
【问题描述】:

我有以下功能:

module.exports = {
  listAccounts: function (callback) {
    var acc = [];
    var calls = [];

    function processAccounts(account, cb) {
      client.getAddressesByAccount(account, function (err, addresses) {
        console.log('getting account', account);
        acc.push({name: account, addresses: addresses});
        return cb();
      });
    }

    client.listAccounts(function (err, res) {
      if (err)
        return callback(err)
      else {
        for (var key in res) {
          calls.push(
            function (cb) {
              processAccounts(key, cb);
            }
          );
        }


        async.parallel(calls, function (err, results) {
          console.log(acc);
        })

      }
    })

  }

}

我要做的是使用for循环将所有函数推送到calls数组,然后运行async.parallel来运行所有函数。

问题是,在 for 循环结束后,调用数组看起来像这样:

function (cb) {
              processAccounts(key, cb);
            },function (cb) {
              processAccounts(key, cb);
            },function (cb) {
              processAccounts(key, cb);
            }

它不会将key 转换为实际值,而是将其保留为key

【问题讨论】:

  • 尝试res[key]获取价值?

标签: javascript node.js asynchronous node-async


【解决方案1】:

我认为你想要的是 async.each

async.each(calls, function(key, cb) {
  processAccounts(key, cb);
},
function(err){
    if (err)
       console.log('oh no!', err);

    console.log('all accounts processed');
});

【讨论】:

    【解决方案2】:

    使用函数创建一个新作用域,其中值可以是闭包中的容器。

    var res = {a:'hello', b:'howdy'};
    var calls = [];
    
    for (var key in res) {
        calls.push(
            (function(k) {
                return function (cb) {
                    console.log('say: ' + res[k] + ' to ' + cb);
                }
            })(key)
        );
    }
    
    calls[0]('you');
    calls[1]('me');
    

    打印:

    说:你好

    说:向我问好

    【讨论】:

    • 完美运行,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2019-04-07
    • 2012-06-04
    • 2020-11-16
    相关资源
    最近更新 更多