Ich habe 3 Funktionen, die Anrufe zu Backend-Systemen synchronisieren: fnOne, fnTwo, fnThree. Ich weiß, dass ich es nicht richtig mache, aber ich kann den richtigen Weg nicht finden.Verzögerte Versprechen - Ausführen von Funktionen nacheinander, nachdem jede abgeschlossen ist
Ich beginne durch, indem Sie versuchen, sie rufen Sie eine aus, nachdem jeweils ergänzt:
jedoch fnOne hat bereits ein latentes Objekt innerhalb davon und wenn das behoben ist es mein Versprechen zu lösen.
$.when(oController._fnOne()).done(function(){
console.log("fn one complete");
});
Funktionen
_fnOne: function(){
var oController = this;
//when the deferred is done in _checkInstanceStatus, it is resolving the above, rather than the pDeferred in this function resolving the above.
$.when(oController._checkInstanceStatus(oParams)).done(function(oStatusData) {
//does some stuff
return $.Deferred(function() {
var pDeferred = this;
//does a call for data and upon success i will resolve ..
pDeferred.resolve();
});
});
}
andere Funktion
_checkInstanceStatus: function(oParams){
return $.Deferred(function() {
var pDeffered = this;
//does a call for data and upon success i will resolve...
pDeffered.resolve(data);
});
});
},
Dann ist der Plan und die Kette um sie zu versuchen, damit sie eins nach dem anderen laufen, etwa so:
$.when(oController._fnOne())
.then(oController._fnTwo())
.then(oController._fnThree())
.done(function(){
console.log("all complete!");
});
Ich fürchte, es nicht genug Informationen in der Frage ist es, Ihnen eine solide Antwort zu geben. Was ist "ruft" zum Beispiel "fnOne"? Ist es etwas, das ein Versprechen zurückgibt? –
@T.J.Crowder danke für Ihre Antwort, ist ein Anruf, wo es das Backend-System für Daten aufruft, ich bin das Auflösen der verzögerte, nachdem dieser Aufruf erfolgreich beendet hat pDeferred.resolve(); – neeko
Dieser Aufruf an das Backend-System ist über was, '$ .ajax'? Nochmal: Gibt es ein Versprechen oder Aufschub, oder ...? –