内部同步Redis用于循环

时间:2018-09-06 13:03:43

标签: redis

一旦找到列表中的某个项目,如何使此函数停止循环。现在,回调被多次调用,因为它在列表中的所有项目上循环。

我只需要查找至少一项,调用回调,然后停止循环。我可以使用redis.multi并查询所有项目,然后检查结果以确保回调仅被调用一次。是否有其他选项不需要使用其他模块即可查询所有项目?

this.validateSomething = function(cback){
    redis.hgetall('items', function(error, item_list) { 
        if (error) {
            cback(false); 
            return;
        }else{
            //check if the item contains what we need
            for(var item in item_list){  

                redis.hmget('item_data:' + item , field1, function(error, result) { 
                    if (error) {
                        cback(false); 
                        return;
                    }else{
                        if ( result == 'yes' ){ 
                            cback(true);
                            return; 
                        }
                    }   
                });   
            }
        }  
    });
};

编辑: 我将代码更新为类似的内容,但是它正在查询所有项目,因此如果我有成千上万的项目,我认为这是浪费资源。

this.validateSomething = function(cback){
    redis.hgetall('items', function(error, item_list) { 
        if (error) {
            cback(false); 
            return;
        }else{

   var redisCommands = Object.keys(item_list).map(function(item){
                return ['hmget', 'item_data:' + item , 'field1'];
            });

   redis.multi(redisCommands).exec(function(error, replies){
                if (error){
                    cback(false);
                    return;
                }
                for (var i = 0; i < replies.length; i++){
                    if ( replies[i] == 'yes' ){ 
                        cback(true);
                        return; 
                    }  
                } 
                cback(false); 
            });

        }  
    });
};

0 个答案:

没有答案