[英]Error using Redis Multi with nodejs
我正在使用 Redis 并使用 Redis 模块从 nodejs 咨询它。
当我执行 client.multi() 并且 redis 服务器关闭时,回调不会发送错误并且 nodejs 应用程序终止。 这是错误
/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)
这是我的代码:构造函数类
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)
})
}
});
}
仅供参考,我在依赖于旧版本 node_redis 的旧库中遇到了这个问题。
此问题是一个错误,已在 v0.9.1 中修复 - 2013 年 11 月 23 日: https : //github.com/mranney/node_redis/pull/457
我认为人们仍然到达这里......(不确定这是否直接回答了这个特定问题,但我假设人们到达这里,因为 multi.exec() 返回 true / 事件循环没有等待它的响应。
在修复后(在 node-redis 中),可以用 Promise 包装 exec 的结果,然后您将确保结果将包含来自 multi 的回复。
因此,您可以向 multi 添加一些 redis 命令:
await multi.exists(key);
await multi.sadd(key2,member);
然后在结果中执行以下操作:
return new Promise((resolve, reject) => {
multi.exec((err, replies) => {
if (err) {
reject(err);
}
return resolve(replies);
});
});
否则,如果你只是这样做: const reply = await multi.exec();
它只会让你返回真实,而不是回复
** 重要的是 - 这指的是“async-redis”和“node-redis”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.