Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Asynchrone Ausführung von Redis-Befehlen

Ich nehme an, das asyncjs-Modul, das Sie verwenden, ist dasjenige, das unter https://github.com/fjakobs/async.js dokumentiert ist

In Ihrem Code:

  • list() ist ein Generator. Es ermöglicht, dass das Array von asyncjs iteriert wird. Das Array ist ein Array von Werten.
  • call() ist ein Mapper, der aufruft jeder Gegenstand. Die Items müssen also aufrufbar sein (d.h. es müssen Callbacks sein).
  • end() ist ein Beendigungsendpunkt, der aufgerufen wird, wenn die Iteration beendet ist. Als Parameter bekommt man nur den letzten Wert der Sequenz (nicht die ganze Sequenz).

Sie haben "[TypeError:Object true has no method 'apply'] erhalten " Fehler, weil die Liste, die Sie erstellt haben, keine Liste von Rückrufen ist, sondern eine Liste von Werten.

Hier ist ein Code, der tun sollte, was Sie wollen:

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

Bitte beachten Sie, dass wir hier map() anstelle von call() und toArray() anstelle von end() verwenden.