Jag antar att asyncjs-modulen du använder är den som finns dokumenterad på:https://github.com/fjakobs/async.js
I din kod:
- list() är en generator. Det gör att arrayen kan itereras av asyncjs. Matrisen är en matris med värden.
- call() är en mappare som anropar varje sak. Objekten måste därför kunna anropas (dvs. de måste vara återuppringningar).
- end() är en avslutningsslutpunkt, anropad när iterationen är över. Som parameter får du bara det sista värdet av sekvensen (inte hela sekvensen).
Du fick "[TypeError:Object true has no method 'apply'] " fel eftersom listan du har byggt inte är en lista över återuppringningar. Det är en lista med värden.
Här är lite kod som ska göra vad du vill:
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()
Observera att vi här använder map() istället för call(), och toArray() istället för end().