Grundsätzlich habe ich Aufrufe an verschiedene gespeicherte SQL-Prozeduren, die Versprechen zurückgeben. Normalerweise würden diese in zufälligen Reihenfolgen beginnen/enden, da sie asynchron sind. Ich muss die Reihenfolge kontrollieren, in der jede Prozedur aufgerufen wird.Achten Sie auf die Versprechung der Versprechung und dann auf die nächste Versprechung. Beobachtbar gegen Versprechen?
ich versucht habe .then()
auf dem callCustomerIUD Versprechen mit, aber this._dataService.customerIUD(...).then(...)
läuft erst nach callCustFieldIUD()
, so customerFieldIUD
this.key
bekommt als undefined
.
saveChanges(record) {
this.callCustomerIUD(record);
this.callCustFieldIUD();
}
callCustomerIUD(record): Promise<any>{
return this._dataService
.customerIUD(...)
.then(data => {
//THIS KEY IS NEEDED FOR customerFieldIUD
this.key = data[data.length-1].CustomerKey;
}, error => {
console.log(error);
});
}
callCustFieldIUD() : Promise<any>{
//USES KEY FROM customerIUD
this.fillCustomerField(this.key);
return this._dataService.customerFieldIUD(...);
}
Ich habe Observables berücksichtigt, kann ich sie in diesem Fall verwenden? Hier ist meine data.service.ts
Methoden Referenz oben. Sollten das Observable sein und nicht Promises?
customerIUD(data: any) : Promise<any>{
return this.fooHttp
.postData(...);
}
customerFieldIUD(data: any) : Promise<any>{
return this.fooHttp
.postData(...);
}
Observablen Im Allgemeinen kann die Arbeit erledigen, die ES6 Versprechen tun. Ich bin mir nicht sicher, was genau in Ihren Methoden passiert, aber möglicherweise könnten RxJS-Operatoren hilfreich sein. – estus
Ich bin neu bei Observablen. Denkst du, wenn ich die "Promise" -Typen auf "Observable" ändere, kann ich rxjs-Operatoren für die Observables verwenden? – jhhoff02
Es ist nicht klar, ob "fooHttp" Ihr eigener Dienst oder der von Drittanbietern ist. Wenn sie Versprechungen zurückgibt, sollten sie mit dem Operator "fromPromise" in beobachtbar umgewandelt werden, oder der gesamte Dienst "fooHttp" sollte so geändert werden, dass Observables verwendet werden. – estus