2014-04-21 110 views
0

我想要傳遞數組,並使用數組中的數據從redis中獲取數據以形成一個新數組。然後使用新的陣列來工作。在node.js中異步

我嘗試用戶async.map,下面的代碼:

var sampleData = [{ 
    'name': 'name1', 
    'age': 'age1' 
}, { 
    'name': 'name2', 
    'age': 'age2' 
}, { 
    'name': 'name3', 
    'age': 'age3' 
}]; 

async.mapSeries(sampleData, function (data, callback) { 
    return callback(null, data['name']); 
}, function (err, results) { 
    console.log('results : ' + results); //results : name1,name2,name3 
}); 

但是當循環完成

+0

在你的'功能(數據,回調)'映射功能,您應該讓*異步*來電Redis的??? – Bergi

回答

0

代碼沒有回調,我不知道確切的問題是什麼。
http://requirebin.com/?gist=11136258上運行此代碼我得到了預期的結果。
如果您想知道爲什麼得到name1,name2,name3是因爲您連接了字符串和數組,所以數組被強制轉換爲一個字符串,導致以逗號分隔的項目列表。

如果您想要從對象中的某個字段到對象的其餘部分進行映射,您可以執行reduce來創建具有該映射的對象。 你可以把整個對象放在那裏,或者如果你願意,可以過濾掉名字。 我把這個例子放在同一個要點中。

代碼示例:

var async = require('async'); 
var sampleData = [{'name':'name1', 'age':'age1'},{'name':'name2', 'age':'age2'},{'name':'name3', 'age':'age3'}]; 
async.mapSeries(sampleData, function (data,callback) { 
    return callback(null, data['name']); 
}, function(err, results) { 
    console.log('results : ', results); 
}); 

// Getting data by name 
async.reduce(sampleData, {}, function (byName, data, callback) { 
    byName[data.name] = {age: data.age}; 
    callback(null, byName); 
}, function (err, dataByName) { 
    console.log('Data by name', dataByName); 
}); 
+0

我將使用name1 name2 name3來獲得數據形成{['name1'] => {'add':'aaa','age':'age1'} ['name2'] => {'add':' bbb','age':'age1'}}。 – skdvn

+0

我想要用戶名1,名稱2,名稱3來獲得數據形成到二維數組 > {[name1] => {'a','b'} [name2] => {'c','d'}} 然後用它來工作。 – skdvn

+0

我更新了示例以展示如何使用reduce來做到這一點。 – TheShellfishMeme