node.js - Nodejs 中的 Redis for 循环无法正常工作

标签 node.js redis node-redis

我有一个如下所示的 for 循环,它没有按预期执行。

var redis = require('redis');
var client = redis.createClient();
var arr = [{title:"title1"},{title:"title2"},{title:"title3"},{title:"title4"}];
for(var i =0; i<arr.length; i++){
//console.log(arr[i]);
var obj1 = arr[i];
client.get(obj1.title, function(err, response){
 if(err){
  console.log(err);
 }
 if(response){
   if(i%3==0){
     client.del(obj1.title);
   }else{
     client.incr(obj1.title);
   }
 }else{
   client.set(obj1.title, 1);
 }
});
}

之后运行下面代码的输出是

for(var i=0; i<arr.length; i++){
client.get(arr[i].title, redis.print);
}

输出:

Reply: null
Reply: null
Reply: null
Reply: null
Reply: null
Reply: null
Reply: 2

这不是我所期望的,因为除可被 3 整除的值外,所有值都应至少为 1;

最佳答案

请创建一个新函数。在新功能中,您可以删除、增加或创建新 key 。

下面的代码对我来说效果很好。请检查。

var redis = require('redis');
var client = redis.createClient();
var arr = [ {
    title : "title1"
}, {
    title : "title2"
}, {
    title : "title3"
}, {
    title : "title4"
} ];


function delOrIncr(obj1, i) {
    client.get(obj1.title, function(err, response) {
        if (err) {
            console.log(err);
        }
        if (response) {
            if (i % 3 === 0) {
                console.log('Deleting >' + obj1.title);
                client.del(obj1.title);
            } else {
                console.log('Increment >' + obj1.title);
                client.incr(obj1.title);
            }
        } else {
            console.log('Creating new >' + obj1.title);
            client.set(obj1.title, 1);
        }
    });
}

for (var i = 0; i < arr.length; i++) {
    delOrIncr(arr[i], i);

}

注意:-

请将 get 作为单独的程序运行以检查上述程序的结果。

关于node.js - Nodejs 中的 Redis for 循环无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39364362/

相关文章:

node.js - NodeRedis client.multi() hgetall 性能

javascript - 如何在将 webrtc 拍摄的视频发送到服务器之前对其进行压缩?

javascript - 按顺序触发异步调用

c# - StackExchange Redis - StringSet 与 SetAdd 和过期

node.js - Redis 事件处理函数正在丢失类引用

javascript - 如何将JS对象传递给redis中它自己的事件参数 - 连接事件上的sentinel

javascript - 如何在node js中使用javascript文件中的数组数据?

node.js - 从外部模块加载文件而不导出

Laravel 5.2 多项目在 redis 上使用队列,如果作业失败则记录遍历数据库

redis - 使用 redis 哨兵时,如何使用密码保护主节点和副本节点?