Ich muss 3 Anfragen in der Kette machen. Also benutze ich dafür jquery.Zurückgestellte Ketten in jquery
Request 1
-> on done if response contains expected result then Request 2 else return empty array/null
-> on done if response contains expected result then Request 3 else return empty array/null
private request1() {
const vm = this;
vm.isLoading(true);
let deffer = system.defer(dfd => {dataService.getResponse1()
.done((response) => {
request2(response.collection))
dfd.resolve();
});
return deffer.promise();
}
private request2(collection) {
dataService.getResponse2(collection)
.done((response) => request3(response.collection));
}
private request3(collection) {
dataService.getResponse3(collection)
.done((response) => saveResponse(response.collection));
}
private saveResponse(collection) {
//do some stuff
}
in Constructor nenne ich request1
wie
vm.request1().done(() => {
vm.isLoading(false);
});
Das Problem ist, dass isLoading
-false
vor setted wird saveResponse
genannt wird. Wie sollte ich meine Anfrage-Struktur korrekt umbauen, um isLoading
zu aktualisieren, nachdem alle Anfragen beendet sind?
Danke.
Ich denke, Sie möchten dfd.resolve() im done-Handler in request3 aufrufen. Eine Möglichkeit besteht darin, dfd an request2 und dann an request3 zu übergeben. Wo Sie den Anruf jetzt haben, wird das Versprechen zu Beginn von Anfrage2 gelöst. – mab
Mögliches Duplikat von [Wie verkette ich eine Sequenz von zurückgestellten Funktionen in jQuery 1.8.x?] (Http://stackoverflow.com/questions/13651243/how-do-i-chain-a-sequence-of-secreated-) functions-in-jquery-1-8-x) –