Angular2, Typoskriptangular2 2 async-Aufruf
Ich habe eine Komponente, die 1 Objekt auf einmal vom Server anzeigt.
Auf das Klicken einer Schaltfläche führt das Formular eine Aktion für das Objekt aus, sendet Daten an den Server. In der nächsten Zeile wird sofort das nächste Objekt angezeigt.
this.rawS.updateTags({......}); //Update object
this.candidateC.footerNavigateTo(.....);//Get next object
Aber es gibt eine Race-Bedingung, wo Ajax nächstes Objekt erreicht den Server zu erhalten, bevor die updateTags Ajax den Server erreicht.
Code of updateTags ist
updateTags(rawCandidate) {
this.baseAjaxService.doPost(this.baseUrl + 'tags/update', rawCandidate)
.subscribe(data => {
console.log(data);
});
}
-Code für doPost ist
doPost(url, inputParamJSON){
let httpResponse = this.http
.post(url, inputParamJSON, this.options)
.map(this.extractData)
.catch(this.handleAjaxError);
return httpResponse;
}
Die Route für 'continue_screening' eine Route Resolver hat, die das nächste Objekt bringt.
Wie kann ich sicherstellen, dass footerNavigateTo() erst ausgeführt wird, nachdem UpdateTags den vollständigen Zyklus abgeschlossen hat?
Dies ist keine Wettlaufbedingung. Was Sie tun, ruft 'this.candidateC.footerNavigateTo()' auf, bevor der 'this.rawS.updateTags()' Callback aufgerufen wird. Mit anderen Worten warten Sie nicht darauf, dass der AJAX-Aufruf abgeschlossen wird, bevor Sie darauf reagieren. @ Vincismiques Antwort ist korrekt, Sie müssen 'flatMap' verwenden, um die Anrufe zu verketten. Diese Antwort könnte auch helfen: https://stackoverflow.com/questions/34104638/how-to-chain-http-calls-in-angular2/34107312 –