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!");
谢谢大家!希望对您有所帮助!
我快被一个找不到解决方案的问题搞疯了。我无法从 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!");
谢谢大家!希望对您有所帮助!