es ist ein Teil einer Dienstprogramm-Bibliothek für eckig, aber ich werde nur die Funktion selbst hier kopieren, um es einfach zu machen, das Problem zu reproduzieren. Das Problem besteht darin, dass aus irgendeinem Grund 1 Element in der Ausgabe weniger vorhanden ist als im Array. Zum Beispiel gibt die Array-Länge von 1000 nur 999 Elemente im Ergebnis-Array aus. Warum?synchronen Iterator überspringt erstes Element in Array
die Funktion:
var sync = function(items, eachFn, callbackFn){
var results = [],
errors = [];
function next(error,result){
if(error) {
errors.push(error);
}
if(result) {
results.push(result);
}
if(items.length == 0){
return callbackFn(errors,results);
}else{
eachFn(items.shift(),next);
}
};
next();
};
die Repro:
var array = new Array(1000).fill(0);// 1000 item array
var i = -1;
sync(array,function(item,next){
i++;
next(null,i);
},function(errors,results){
console.log(results.length === 1000);// but its 999, why?
});
Initialisieren des Array mit 0 bringt 1000 Elemente statt -1 – andrepaulo