node_redis 客户端 - 无法 return 从查询中输出值

node_redis client - Cannot return out values from a query

我快被一个找不到解决方案的问题搞疯了。我无法从 redis 查询中 return 输出值。我正在使用 node_redis 客户端 (http://redis.js.org/) 作为 Node.JS.

的 redis 驱动程序

问题是:我写了一个函数来获取用户状态连接,return它从其他函数中获取值。

//CHECK USER STATUS
exports.checkUserStatus = function(uid){
    redis.multi()
        .sismember('users:online',uid)
        .sismember('users:iddle', uid)
        .sismember('users:out', uid)
        .sismember('users:locked', uid)
        .exec(function(err, res){
            res.forEach(function(res, index){
                if(res != 0){
                    switch(index){
                        case 0:
                            return 'online';
                            break;
                        case 1:
                            return 'iddle';
                            break;
                        case 2:
                            return 'out';
                            break;
                        case 3:
                            return 'locked';
                            break;
                        default:
                            return 'offline';
                    }
                }
            });
        })
}

但是功能return什么都没有!。如果我用 console.log() 替换 return 行,就可以了!但我不需要 console.log(),我需要取值。

我也尝试在查询外部创建一个变量并从内部设置它,然后 return 但是,它不起作用。

有人知道我该怎么做吗?

谢谢!

我不是 Redis 专家,但是...也许您只是缺少 return 关键字?

var result;
exports.checkUserStatus = function(uid){
  redis.multi()
  ...
    .exec(function(err, res){
        res.forEach(function(res, index){
            if(res != 0){
                switch(index){
                    case 0:
                        result = 'online';
                        break;
                    case 1:
                        result ='iddle';
                        break;
                    case 2:
                        result = 'out';
                        break;
                    case 3:
                        result = 'locked';
                        break;
                    default:
                        result = 'offline';
                }
            }
        });
    })
    return result;
}

基于 http://redis.io/commands/MULTI 多 return 值的手册,而您没有 return。

在这个网站上,我收到了正确的西班牙语答案。我post这里是为了帮助别人:

//CHECK USER STATUS ... Take a look at the new parameter 'callback' in the function!

exports.checkUserStatus = function(uid, callback){
    redis.multi()
        .sismember('users:online',uid)
        .sismember('users:iddle', uid)
        .sismember('users:out', uid)
        .sismember('users:locked', uid)
        .exec(function(err, res){
            res.forEach(function(res, index){
                if(res != 0){
                    switch(index){
                        case 0:
                            // Here invoke the user's function
                            // and I pass the info
                            callback('online'); 
                            break;
                        case 1:
                            callback('online'); 
                            break;
                        case 2:
                            callback('online'); 
                            break;
                        case 3:
                            callback('locked'); 
                            break;
                        default:
                            callback('offline'); 
                    }
                }
            });
        })
}

然后我捕获返回值,如下所示:

// sequence of events
// This happend first - #1
checkUserStatus('uid-12343', function(status, user) {
    // This happend at the end - #2
    // Here we catch the status in asynchronous way
});

// This happend second - #2
console.log("This happend before the redis info arrive!");

谢谢大家!希望对您有所帮助!