Redis
 sql >> Base de données >  >> NoSQL >> Redis

Exécution asynchrone des commandes redis

Je suppose que le module asyncjs que vous utilisez est celui documenté sur :https://github.com/fjakobs/async.js

Dans votre code :

  • list() est un générateur. Il permet au tableau d'être itéré par asyncjs. Le tableau est un tableau de valeurs.
  • call() est un mappeur qui appelle chaque objet. Les éléments doivent donc être appelables (c'est-à-dire qu'ils doivent être des rappels).
  • end() est un point final de terminaison, appelé lorsque l'itération est terminée. En tant que paramètre, vous n'obtenez que la dernière valeur de la séquence (pas la séquence entière).

Vous avez le "[TypeError :Object true has no method 'apply'] " erreur car la liste que vous avez construite n'est pas une liste de rappels. C'est une liste de valeurs.

Voici un code qui devrait faire ce que vous voulez :

var redis = require("redis");
var client = redis.createClient();
var async = require("asyncjs");

function main() {

  var siteId = 1;

  async
    .list(['x','y','z'])
    .map( function (item,next) {
      client.hincrby('traffic:' + siteId, item, 1, function (err,res) {
        next(err,res)
      })
    })
    .toArray( function(err,res) {
      console.log(err); 
      console.log(res); 
    });
}

main()

Veuillez noter ici que nous utilisons map() au lieu de call() et toArray() au lieu de end().