我無法找到async.js庫的方法如下:Nodejs async:如何將鍵映射到鍵值?
我:
- 按鍵陣列
['a', 'b', 'c']
- 迭代器,如:
function it(item, next){ next(null, item+item); }
如果我用async.map([1, 5], it, cb)
,我得到[2, 10]
。
在這種情況下,我該如何獲得{ 1: 2, 5: 10 }
?
我無法找到async.js庫的方法如下:Nodejs async:如何將鍵映射到鍵值?
我:
['a', 'b', 'c']
function it(item, next){ next(null, item+item); }
如果我用async.map([1, 5], it, cb)
,我得到[2, 10]
。
在這種情況下,我該如何獲得{ 1: 2, 5: 10 }
?
只是一些變化:
// #1
async.map(keys, function(key, next) {
someFoo(key, function(err, value) {
// TODO: handle err, or not.
next(null, value);
});
}, function(err, result) {
var finalresult = {};
keys.forEach(function(key, i) {
finalresult[key] = result[i];
});
cb(err, finalresult);
});
// #2
async.parallel((function() {
var actions = {};
keys.forEach(function(key) {
actions[key] = function(next) {
someFoo(key, function(err, value) {
// TODO: handle err, or not.
next(null, value);
});
};
});
return actions;
})(), function(err, results) {
cb(err, finalresult);
});
我找到了一些解決方案:
var result = {}
async.each(keys, function(key, next){
someFoo(key, function(err, value){
if(err) 'ignore error';
result[key] = value;
next();
})
}, function(err){
cb(err, result)
})
有任何人更美的解決方案?
我想沒有通用的解決方案,因爲即使在這裏所有的崩潰,如果鍵包括noscalar值。
async.reduce([1, 2, 3], {}, function(memo, item, callback) {
memo[item] = item + item;
cb(err, memo);
}, function(err, result) {
cb(err, result)
});
* 未經測試的代碼
多一點優雅