Javascript-bricht eine for-Schleife innerhalb einer callback-Funktion
Habe ich einen code wie den folgenden:
function test(obj) {
if(//some conditon) {
obj.onload();
}else{
obj.onerror();
}
}
for(var i=0;i<4;i++){
test({
onload:function(e){
//some code to run
},
onerror:function(e){
break;
}
});
}
Die Kernaussage wird die Funktion test() ist eine Funktion, um eine XHR-Anfrage (es ist tatsächlich eine API von der Appcelerator Titanium Plattform, so dass ich keine Kontrolle habe), und ich bin looping etwas zum Aufruf der test-Funktion. Ich brauchen, um zu brechen Sie die Schleife auf die onerror-Funktion, aber ich bekomme eine Fehlermeldung besagt, dass die Pause nicht innerhalb einer Schleife oder switch-Anweisung. Wie kann ich diese umschreiben?
- danke, ich Stimmen Sie nur beantworten, in der Vergangenheit, aber jetzt weiß ich, Sie zu schlagen, die Häkchen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr code-Beispiel wird, repräsentieren einige eigentliche code (d.h. alle die Verarbeitung erfolgt in der gleichen Ereignis-Schleife Häkchen), können Sie Folgendes tun:
Ansonsten, wenn es etwas asynchron gemacht, Sie zu rufen
test
sequenziell und nicht parallel. Zum Beispiel,Nicht möglich. Eine for-Schleife ist eine synchrone Verfahren bei einem Ajax-request nicht. Das bedeutet, dass, wenn die onerror callback geschieht, wird die for-Schleife ist schon getan ausführen.
Als alternative könnte man einführen, ein check in Ihre onsuccess-handler, die bestätigt, dass keine Fehler passiert sind, noch nicht.
Bit hacky vielleicht aber könnte man so etwas mit einer handler-Funktion.
Nicht getestet, aber vielleicht könnte man bind-Funktion von scope in nennen, auch?
Können Sie brechen die Schleife in test () - Funktion. Ich denke, die beste Lösung wäre in diesem Fall eine exception werfen, innen test () - Funktion, dann fangen Sie es in der Schleife und brechen.
Vielleicht können Sie das 'onload' callback rekursiv?
Bedeutung, die Sie gerade nennen Sie die 'test' - Methode im 'onload' handlerr, dies würde auch bedeuten, dass Sie Feuer alle Anfragen in der Reihenfolge statt alle gleichzeitig.
Nehme ich die Antwort von penartur, aber ich geändert, ohne die "Pause":