我是redis新手,我一直在研究一些示例,每当i am在node js iam中使用嵌套的redis语句时,我都会遇到一些错误。
我有以下代码:

var redis= require("redis");
client = redis.createClient();
client.on('connect',function(err){
if(err) console.log("not able to connect");
console.log("connected");});
client.RPUSH("pony","new");
client.RPUSH("pony","val");
client.LINDEX("pony",-1,function(err,reply){
if(err) console.log("oops");
console.log(reply);
client.LREM("pony",-1,reply,function(err,rep){
    if(err) console.log("error");
    else console.log(rep);
});})
client.quit();

我得到输出
有联系的,
瓦尔
错误
在这里,Lindex的回复是一个字符串“val”,我将它传递给lrem。
为什么嵌套的client.lrem不接受reply的值?

最佳答案

你的密码没问题。但是client.quit()在您的client.LREM("pony",-1,reply,function(err,rep){ if(err) console.log(err); else console.log(rep);});之前执行
可能执行,但您收到错误
{ [AbortError: Stream connection ended and command aborted. It might have been processed.] code: 'NR_CLOSED', command: 'LREM', args: [ 'pony', -1, 'val' ] }
client.quit()

client.LINDEX("pony",-1,function(err,reply){
if(err) console.log("oops");
console.log("##" + reply);

client.LREM()需要更多的时间来执行,因为它在javascript事件队列变空后执行(javascript就是这样工作的)。
所以我建议您可以使用promise(如“q”)或async.series()来串行执行代码,并确保所有操作都完全执行,然后关闭redis客户端连接。
或者另一个简单的选项是不要关闭redis客户端连接。

09-25 20:56