我有以下功能:
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循环结束后,calls数组看起来像这样:
function (cb) {
processAccounts(key, cb);
},function (cb) {
processAccounts(key, cb);
},function (cb) {
processAccounts(key, cb);
}
它不会将key
转换为实际值,而是将其保留为key
答案 0 :(得分:1)
使用函数创建一个新的范围,其值可以是闭包中的容器。
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');
打印:
说:你好。
说:你好吗
答案 1 :(得分:0)
我认为你想要的是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');
});