Die Situation ist, dass ich dynamisch eine Reihe von Skripts von einer API laden, die ich dann über eval()
aufrufen. Es ist mir egal, in welcher Reihenfolge die Skripte aufgerufen werden, aber ich möchte nicht, dass sie gleichzeitig aufgerufen werden. Das heißt, die Skripte A, B und C können in der Reihenfolge C, B, A zurückgegeben werden, und ich möchte sofort mit eval(C)
beginnen, wenn C zurückgegeben wird, aber ich möchte eval(B)
warten, bis eval(C)
abgeschlossen ist.Ausführen von Skripten von .each() synchron, aber ohne Verzögerung in der Reihenfolge der Fertigstellung
Ohne in den voll behaarten Code zu kommen, hier ist das Herz davon, wo "Instanzen" ein String-Array ist.
$.each(instances, function(index, instance) {
var apiUrl = "http://the-api-url.com/" + instance;
$.getJSON(apiUrl, function(data) {
// except I don't want to eval here as evaluations may overlap
eval(data.script);
});
});
Von dem, was ich verstehe, konnte ich .when()
nutzen zu warten, bis alle vollständig waren, aber das würde Zeit verschwenden, wie ich brauche nicht zu warten, bis alles in Ordnung heruntergeladen wird ihre Ausführung zu beginnen.
Lesen Sie über Versprechen in ES5. – Niloct
Wenn Sie sagen, dass sie heruntergeladen und in beliebiger Reihenfolge ausgeführt werden können, aber die Aufrufe von 'eval()' sich nicht "überlappen" können, haben Sie diesen Code bereits geschrieben. –
Testen Sie Async-Operationen? Sonst sehe ich kein Problem in deiner Logik. –