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

Asynkron udførelse af redis-kommandoer

Jeg formoder, at det asyncjs-modul, du bruger, er det, der er dokumenteret på:https://github.com/fjakobs/async.js

I din kode:

  • list() er en generator. Det tillader arrayet at blive itereret af asyncjs. Matrixen er en matrix af værdier.
  • call() er en mapper, som kalder hver vare. Varerne skal derfor kunne kaldes (dvs. de skal være tilbagekald).
  • end() er et termineringsslutpunkt, kaldet når iterationen er slut. Som parameter får du kun den sidste værdi af sekvensen (ikke hele sekvensen).

Du har "[TypeError:Object true has no method 'apply'] " fejl, fordi den liste, du har bygget, ikke er en liste over tilbagekald. Det er en liste over værdier.

Her er noget kode, som skal gøre, hvad du vil:

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

Bemærk venligst, at vi her bruger map() i stedet for call(), og toArray() i stedet for end().




  1. Sådan optimeres ydeevnen af ​​MongoDB

  2. MongoDB $isoWeek

  3. Ønsker at implementere web-sockets i Laravel

  4. MongoDB Schema Planlægningstips