Ich nehme an, das asyncjs-Modul, das Sie verwenden, ist dasjenige, das unter https://github.com/fjakobs/async.js dokumentiert ist
In Ihrem Code:
- list() ist ein Generator. Es ermöglicht, dass das Array von asyncjs iteriert wird. Das Array ist ein Array von Werten.
- call() ist ein Mapper, der aufruft jeder Gegenstand. Die Items müssen also aufrufbar sein (d.h. es müssen Callbacks sein).
- end() ist ein Beendigungsendpunkt, der aufgerufen wird, wenn die Iteration beendet ist. Als Parameter bekommt man nur den letzten Wert der Sequenz (nicht die ganze Sequenz).
Sie haben "[TypeError:Object true has no method 'apply'] erhalten " Fehler, weil die Liste, die Sie erstellt haben, keine Liste von Rückrufen ist, sondern eine Liste von Werten.
Hier ist ein Code, der tun sollte, was Sie wollen:
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()
Bitte beachten Sie, dass wir hier map() anstelle von call() und toArray() anstelle von end() verwenden.