sql >> Base de Datos >  >> NoSQL >> Redis

Ejecución asíncrona de comandos redis

Supongo que el módulo asyncjs que usa es el que está documentado en:https://github.com/fjakobs/async.js

En tu código:

  • list() es un generador. Permite que asyncjs itere la matriz. La matriz es una matriz de valores.
  • call() es un mapeador que llama cada elemento. Por lo tanto, los elementos deben ser invocables (es decir, deben ser devoluciones de llamada).
  • end() es un punto final de terminación, llamado cuando finaliza la iteración. Como parámetro, solo obtiene el último valor de la secuencia (no toda la secuencia).

Obtuviste el "[Error de tipo:el objeto verdadero no tiene método 'aplicar'] " error porque la lista que ha creado no es una lista de devoluciones de llamada. Es una lista de valores.

Aquí hay un código que debería hacer lo que quieras:

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

Tenga en cuenta que aquí usamos map() en lugar de call() y toArray() en lugar de end().