2017-04-04 1 views
0

Je peux lire dans le docs du client Node.js Redis:Faire Node.js Redis le .multi du client() et .batch() renvoient des erreurs dans les résultats à des fins de test

If your code contains an syntax error an EXECABORT error is going to be thrown and all commands are going to be aborted. That error contains a .errors property that contains the concret errors. If all commands were queued successfully and an error is thrown by redis while processing the commands that error is going to be returned in the result array! No other command is going to be aborted though than the onces failing.

Comment puis-je écrire un Node.js Redis client .multi() et .batch() afin d'avoir des erreurs dans les résultats à des fins de test?

Répondre

0

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