Node.js Redis客户端开启(';就绪';)事件
我正在使用Node.js的Redis NPM库-我可以像这样监听连接“就绪”事件Node.js Redis客户端开启(';就绪';)事件,node.js,redis,node-redis,Node.js,Redis,Node Redis,我正在使用Node.js的Redis NPM库-我可以像这样监听连接“就绪”事件 var client = require('redis').createClient(); client.on('ready', function () { client.keys('*', function (err, keys) { if (err) { log.error(err); } else { for (var
var client = require('redis').createClient();
client.on('ready', function () {
client.keys('*', function (err, keys) {
if (err) {
log.error(err);
} else {
for (var i = 0; i < keys.length; i++) {
createLocalDataMap(keys[i]);
}
}
});
});
这似乎根本不正确,必须有更好的方法,在连接准备就绪之前,node redis客户端自动将您发送的任何命令排队。一旦连接,这些命令都会在.on('ready')激发之前发送。因此,您确实不需要使用.on('ready')。如果您发送命令太早,它们仍将按预期进行,如果您的连接完全失败,它们将永远不会被发送。您不必担心如果真的是这样的话,那么在稍后的时间内就可以发送了。是的,但是(a)我非常讨厌比赛条件(b)如果连接失败怎么办---->因此我应该检查状态如果连接失败,请执行“错误”操作。Beats checkin on ready for each single connection我同意解决(b)问题,但我需要一个更优雅的解决方案来解决(a)你看到我2天前的答案了吗?如果enable_offline_queue为false(默认为true),则这不是真的。在许多情况下,此选项可能被禁用,在这种情况下,您的答案是错误的。到那时你会怎么做?
var isReady = false;
client.on('ready', function(){
isReady = true;
});
function doSomethingMuchLater(){
if(isReady){
//query redis as normal
}
else {
client.on('ready', function(){
isReady = true;
//now I do what I wanted to do
});
}
}