一旦找到列表中的某个项目,如何使此函数停止循环。现在,回调被多次调用,因为它在列表中的所有项目上循环。
我只需要查找至少一项,调用回调,然后停止循环。我可以使用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);
});
}
});
};