2014-08-30 105 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