Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Redis客户端开启(';就绪';)事件_Node.js_Redis_Node Redis - Fatal编程技术网

Node.js Redis客户端开启(';就绪';)事件

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

我正在使用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 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
   });

}
}