Vous ne savez pas si cela vous intéresse, mais le code suivant génère l'erreur EXECABORT pour MULTI. PS. Je ne suis pas un développeur nodejs :)
code:
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();
});
Sortie:
undefined
{ [ReplyError: EXECABORT Transaction discarded because of previous errors.] command: 'EXEC', code: 'EXECABORT', errors: [ { [ReplyError: ERR wrong number of arguments for 'set' command] command: 'SET', args: [Object], code: 'ERR', position: 2 } ] }
Explication: commande SET prend 2 arguments. Je n'en ai donné qu'un et j'ai imprimé l'erreur sur la console.
L'explication détaillée sur le sujet est dans le numéro this. Voir le dernier commentaire de BridgeAR.
Exemple de code tiré du nodejs git repo