Redis
 sql >> Database >  >> NoSQL >> Redis

Esecuzione asincrona dei comandi redis

Suppongo che il modulo asyncjs che usi sia quello documentato su:https://github.com/fjakobs/async.js

Nel tuo codice:

  • list() è un generatore. Consente all'array di essere iterato da asyncjs. L'array è un array di valori.
  • call() è un mappatore che chiama ogni oggetto. Gli elementi devono quindi essere richiamabili (cioè devono essere richiamati).
  • end() è un punto finale di terminazione, chiamato quando l'iterazione è terminata. Come parametro, ottieni solo l'ultimo valore della sequenza (non l'intera sequenza).

Hai "[TypeError:Object true non ha metodo 'applica'] " errore perché l'elenco che hai creato non è un elenco di richiamate. È un elenco di valori.

Ecco del codice che dovrebbe fare quello che vuoi:

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()

Nota che qui usiamo map() invece di call() e toArray() invece di end().