gpt4 book ai didi

node.js - 为什么我在使用嵌套的 redis 语句时出错

转载 作者:可可西里 更新时间:2023-11-01 11:25:46 26 4
gpt4 key购买 nike

我是 Redis 的新手,我一直在研究一些示例,每当我在 Node js 中使用嵌套的 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();

我正在获取输出

connected, val, error

这里来自 LINDEX 的回复是一个字符串“val”,我将其传递给 LREM。

为什么嵌套的client.lrem没有取reply的值?

最佳答案

您的代码没问题。但是 client.quit() 在你的 client.LREM("pony",-1,reply,function(err,rep){
如果(错误)console.log(错误);
否则控制台日志(代表);
});

可以执行但你得到错误

{ [AbortError:流连接结束,命令中止。它可能已被处理。]
代码:'NR_CLOSED',
命令:'LREM',
args: [ '小马', -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 客户端连接。

关于node.js - 为什么我在使用嵌套的 redis 语句时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com