2014-08-30 82 views
1

我想知道是否有可能实现同步检索redis的。node.js redis同步

_.each(seeds, function(subseed, key, list){ 

    client.smembers(subseed, function (err, replies) { 
     retrieved = retrieved.concat(replies) 
    }) 
}) 
client.quit(); 
console.log("start") 
console.log(retrieved.length) 

OUTPUT:

start 
0 
10 

所以看起来我需要以某种方式去点时smembers结束它的运行,或者加时赛以同步模式运行smembers。

我该如何解决这个问题?

回答

3

为什么要让它同步? 如果你想在members之后做点什么,只需在回调函数中做。

var callback=function(res){ 
    retrived=retrieved.concat(res); 
    //continue do other things 
}; 

client.smembers("offer", function (err, replies) { 
    if(!err){ 
     callback(replies); 
    } 
}) 

如果你想有一个循环结束后做一些事情,你可以尝试的underscore.js_.after,例如:

var times=10; 

var arrayOfReplies=[]; //store all replies 
var callback=function(){ 
    //do something with arrayOfReplies 
} 

var afterAll = _.after(times,callback); //afterAll's callback is a function which will be run after be called 10 times 

for(var i=0;i<10;i++){ 
    client.smembers("offer", function (err, replies) { 
     if(!err){ 
      arrayOfReplies=arrayOfReplies.concat(replies); 
      afterAll(); 
     } 
    }) 
} 

看多:http://underscorejs.org/#after

+0

太好了,谢谢,但如果我有什么有一个异步运行循环,就像我已经更改的示例一样,如何在所有异步运行结束时获得控制权。谢谢。 – com 2014-08-30 12:49:42

+0

太好了,谢谢! – com 2014-08-31 09:42:25