Предполагам, че модулът asyncjs, който използвате, е документираният на:https://github.com/fjakobs/async.js
Във вашия код:
- list() е генератор. Позволява масивът да бъде повторен от asyncjs. Масивът е масив от стойности.
- call() е картограф, който извиква всеки артикул. Следователно елементите трябва да могат да бъдат извиквани (т.е. те трябва да бъдат обратни извиквания).
- end() е крайна точка на прекратяване, която се извиква, когато итерацията приключи. Като параметър получавате само последната стойност на последователността (не цялата последователност).
Получихте "[TypeError:Object true has no method 'apply'] " грешка, защото списъкът, който сте изградили, не е списък с обратни извиквания. Това е списък със стойности.
Ето някакъв код, който трябва да прави това, което искате:
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()
Моля, имайте предвид, че тук използваме map() вместо call() и toArray() вместо end().