Suponho que o módulo asyncjs que você usa seja o documentado em:https://github.com/fjakobs/async.js
No seu código:
- list() é um gerador. Ele permite que o array seja iterado por asyncjs. A matriz é uma matriz de valores.
- call() é um mapeador que chama cada item. Os itens devem, portanto, ser chamados (ou seja, devem ser retornos de chamada).
- end() é um ponto final de terminação, chamado quando a iteração termina. Como parâmetro, você obtém apenas o último valor da sequência (não a sequência inteira).
Você tem o "[TypeError:Object true has no method 'apply'] " erro porque a lista que você criou não é uma lista de retornos de chamada. É uma lista de valores.
Aqui está um código que deve fazer o que você deseja:
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()
Observe aqui que usamos map() em vez de call() e toArray() em vez de end().