如何在async.waterfall nodejs中循环...

时间:2016-09-14 09:51:03

标签: node.js

我有一个对象

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时。如何通过键来更正对象?

1 个答案:

答案 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'); });