Předpokládám, že modul asyncjs, který používáte, je zdokumentovaný na adrese:https://github.com/fjakobs/async.js
Ve vašem kódu:
- list() je generátor. Umožňuje iteraci pole pomocí asyncjs. Pole je pole hodnot.
- call() je mapovač, který volá každý předmět. Položky proto musí být volatelné (tj. musí to být zpětná volání).
- end() je koncový bod, který se volá po skončení iterace. Jako parametr získáte pouze poslední hodnotu sekvence (nikoli celou sekvenci).
Máte "[TypeError:Object true has no method 'apply'] ", protože seznam, který jste vytvořili, není seznam zpětných volání. Je to seznam hodnot.
Zde je nějaký kód, který by měl dělat to, co chcete:
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()
Upozorňujeme, že zde používáme map() místo call() a toArray() místo end().