Suppongo che il modulo asyncjs che usi sia quello documentato su:https://github.com/fjakobs/async.js
Nel tuo codice:
- list() è un generatore. Consente all'array di essere iterato da asyncjs. L'array è un array di valori.
- call() è un mappatore che chiama ogni oggetto. Gli elementi devono quindi essere richiamabili (cioè devono essere richiamati).
- end() è un punto finale di terminazione, chiamato quando l'iterazione è terminata. Come parametro, ottieni solo l'ultimo valore della sequenza (non l'intera sequenza).
Hai "[TypeError:Object true non ha metodo 'applica'] " errore perché l'elenco che hai creato non è un elenco di richiamate. È un elenco di valori.
Ecco del codice che dovrebbe fare quello che vuoi:
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()
Nota che qui usiamo map() invece di call() e toArray() invece di end().