我可以在Node.js Redis客户端的docs中阅读:
如果您的代码包含语法错误,则会抛出EXECABORT错误,并且所有命令都将被中止。该错误包含一个包含concret错误的.errors属性。如果所有命令都成功排队并且redis在处理命令时抛出错误,那么将在结果数组中返回错误!除了onces失败之外,没有其他命令会被中止。
如何编写Node.js Redis客户端.multi()
和.batch()
以便在测试结果中出现错误?
答案 0 :(得分:0)
不确定它是否仍与您相关,但是以下代码会为MULTI生成EXECABORT错误。 PS。我不是nodejs开发人员:))
<强>代码强>:
var redis = require("redis"),
client = redis.createClient();
client.sadd("bigset", "a member");
client.sadd("bigset", "another member");
set_size = 20;
while (set_size > 0) {
client.sadd("bigset", "member " + set_size);
set_size -= 1;
}
// multi chain with an individual callback
client.multi()
.scard("bigset")
.smembers("bigset")
.set("a")
.keys("*", function (err, replies) {
// NOTE: code in this callback is NOT atomic
// this only happens after the the .exec call finishes.
client.mget(replies, redis.print);
})
.dbsize()
.exec(function (err, replies) {
// console.log("MULTI got " + replies.length + " replies");
// replies.forEach(function (reply, index) {
// console.log("Reply " + index + ": " + reply.toString());
// });
console.log(replies);
console.log(err);
client.quit();
});
输出:
未定义
{[ReplyError:EXECABORT由于之前的事务被丢弃 错误。]命令:&#39; EXEC&#39;,代码:&#39; EXECABORT&#39;,错误:[{ [ReplyError:ERR错误的参数数量为&#39; set&#39;命令]命令: &#39; SET&#39;,args:[Object],代码:&#39; ERR&#39;,位置:2}]}
解释:SET命令有2个参数。我只给了一个并将错误打印到控制台。
有关该主题的详细说明在this问题中。查看BridgeAR的最后一条评论。
的示例代码