我有一个对象
var object = {
name : null,
id : 12,
sys : [{name:'sys'}],
info : 'string',
some : [{name:'some'}],
end : null
}
在nodejs中我需要在这个对象数组中找到然后stringfy并发送到redis。所以我搜索数组
for(var key in object){
if(Array.isArray(object[key])) {
async.waterfall([
function(callback) {
// put finded item to redis, then from redis I need to get the key.
},
function(res, body, callback) {
if(body) {
object[key] = body // I need to replace array > key.
}
}
])
}
}
但它是异步的,所以在第二个函数object[key]
中与前一个函数中的object[key]
不同。例如,在瀑布的第一个函数中,我将object[key]
= sys放入redis,然后我等待密钥,在第二个函数中,当我得到密钥object[key]
= name时。如何通过键来更正对象?
答案 0 :(得分:1)
我会尝试一些不同的方法
var keys = [];
// get the keys that refers to array property
for(var key in object) {
if(Array.isArray(object[key])) keys.push(key);
}
async.forEachSeries(keys, function(key, next){
// use object[key]
// Do the redis thing here and in it's callback function call next
........, function(){
object[key] = body;
next();
});
});
<强>更新强> 刚刚意识到系列没有理由,因为每个系列也应该有效。
async.forEach(keys, function(key, next){
// use object[key]
// Do the redis thing here and in it's callback function call next
........, function(){
object[key] = body;
next();
});
}, function(err){ console.log('done'); });