首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Redis Multi与nodejs配合使用时出错

问将Redis Multi与nodejs配合使用时出错
EN

Stack Overflow用户
提问于 2013-11-13 23:12:17
回答 2查看 2.6K关注 0票数 0

我正在使用Redis,并使用Redis模块从nodejs咨询它。

当我执行client.multi()而redis服务器关闭时,回调不会发送错误,并且nodejs应用程序终止。这就是错误

代码语言:javascript
复制
    /Users/a/db/node_modules/redis/index.js:151
                    throw callback_err;
                          ^
TypeError: Cannot read property 'length' of undefined
    at Command.callback (/Users/a/db/node_modules/redis/index.js:1098:35)
    at RedisClient.flush_and_error (/Users/a/db/node_modules/redis/index.js:148:29)
    at RedisClient.on_error (/Users/a/db/node_modules/redis/index.js:184:10)
    at Socket.<anonymous> (/Users/a/db/node_modules/redis/index.js:95:14)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:441:14
    at process._tickCallback (node.js:415:13)

这是我的代码:构造函数类

代码语言:javascript
复制
var redis = require('redis');
var client;
function Redis(){
    client = redis.createClient();
    client.on("error", function (err) {
        console.log("Error " + err);
    });
}

Redis.prototype.multi =  function(commands,callback){
    var err = null;
    client.multi(commands).exec(function (error, res) {
        if(error){
            process.nextTick(function(){
                callback(error,null)
            })
        }else{
            process.nextTick(function(){
                callback(null,res)
            })
        }
    });
}
EN

回答 2

Stack Overflow用户

发布于 2014-10-30 00:29:56

仅供参考,我在一个依赖于旧版本node_redis的旧库中遇到了这一点。

此问题是一个错误,已在v0.9.1中修复-2013年11月23日:https://github.com/mranney/node_redis/pull/457

票数 1
EN

Stack Overflow用户

发布于 2021-02-21 20:51:10

我想人们还在往这里走。(不确定这是否直接回答了这个特定问题,但我假设人们到达这里是因为multi.exec()返回true /事件循环没有等待它的响应。

在修复之后(在node-redis中),可以使用Promise包装exec的结果,然后您将确保结果将包括来自多个的回复。

因此,您可以在multi中添加一些redis命令:

代码语言:javascript
复制
await multi.exists(key);
await multi.sadd(key2,member);

然后在结果中做一些类似的事情:

代码语言:javascript
复制
    return new Promise((resolve, reject) => {
        multi.exec((err, replies) => {
            if (err) {
                reject(err);
            }
            return resolve(replies);
        });
    });

否则,如果您只需执行以下操作:const reply = await multi.exec();,它将只返回true,而不是回复

**值得一提的是-这指的是'async-redis‘和'node-redis’

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19957314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档