Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Execução assíncrona de comandos redis


Suponho que o módulo asyncjs que você usa seja o documentado em:https://github.com/fjakobs/async.js

No seu código:
  • list() é um gerador. Ele permite que o array seja iterado por asyncjs. A matriz é uma matriz de valores.
  • call() é um mapeador que chama cada item. Os itens devem, portanto, ser chamados (ou seja, devem ser retornos de chamada).
  • end() é um ponto final de terminação, chamado quando a iteração termina. Como parâmetro, você obtém apenas o último valor da sequência (não a sequência inteira).

Você tem o "[TypeError:Object true has no method 'apply'] " erro porque a lista que você criou não é uma lista de retornos de chamada. É uma lista de valores.

Aqui está um código que deve fazer o que você deseja:
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()

Observe aqui que usamos map() em vez de call() e toArray() em vez de end().