使Node.js Redis客户端的.multi()和.batch()返回结果中的错误以进行测试

时间:2017-04-04 20:02:49

标签: node.js redis node-redis

我可以在Node.js Redis客户端的docs中阅读:

  

如果您的代码包含语法错误,则会抛出EXECABORT错误,并且所有命令都将被中止。该错误包含一个包含concret错误的.errors属性。如果所有命令都成功排队并且redis在处理命令时抛出错误,那么将在结果数组中返回错误!除了onces失败之外,没有其他命令会被中止。

如何编写Node.js Redis客户端.multi().batch()以便在测试结果中出现错误?

1 个答案:

答案 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的最后一条评论。

取自nodejs git repo

的示例代码