关于node-redis中quit()的优雅退出遇到多层异步嵌套问题总结【quit()仅负责一层异步嵌套所有的命令给你处理,再嵌套一层就不会管了】

quit方法参考文章【这篇文章讲的比较细致】:https://www.jianshu.com/p/40c484710c69

官方文档:https://www.npmjs.com/package/redis

 

关于quit和and,更建议使用【quit退出方法-优雅退出(这会将quit命令发送到redis服务器,并在正确处理所有正在运行的命令后立即结束)】

 

总结一句话:quit退出只能处理同一层的异步执行命令【get、set或其他redis操作】,如果出现多层异步嵌套,退出会报错!

 

正确案例【redis命令必须和quit方法同一层异步调用,否则会报错】:

quit优雅退出,正确的同一层异步嵌套退出处理
OwnRedis.createRedisGetOrSet(async (ownRedis) => {
    // 和quit同一层redis的set命令
    ownRedis.set("key", "nodejs-redis");
    // 和quit同一层redis的get命令
    let result = await ownRedis.get("key");
    console.log(result);

    【优雅退出quit】仅负责处理同一层异步嵌套的命令[get、set或其他redis操作方法],如果多层异步嵌套,quit退出会失败!
    ownRedis.quit();
});

 

错误案例【redis命令必须和quit方法同一层异步调用,否则会报错】:

quit之多层异步嵌套退出错误:redis错误提示:AbortError: SET can't be processed. The connection is already closed.
OwnRedis.createRedisGetOrSet(async (ownRedis) => {
    setTimeout(async () => {
        // 和quit方法必须在同一层【否则无法正常处理】
        ownRedis.set("key", "nodejs-redis");
        //  // 和quit方法必须在同一层【否则无法正常处理】
        let result = await ownRedis.get("key");
        console.log(result);
    }, 2000);
    这里的quit方法[get、set是多层异步嵌套,非同一层,退出会失败,抛出异常!]
    redis错误提示:AbortError: SET can't be processed. The connection is already closed.
    ownRedis.quit();
});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值