基本上我調用了返回Promises的不同的SQL存儲過程。通常這些將以隨機順序開始/結束,因爲它們是異步的。我需要控制每個過程被調用的順序。注意Promise完成,然後執行下一個Promise。可觀察vs承諾?
我對callCustomerIUD承諾使用.then()
試過,但this._dataService.customerIUD(...).then(...)
不運行,直到後callCustFieldIUD()
,所以customerFieldIUD
得到this.key
爲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(...);
}
我已經考慮了Observables,我可以在這種情況下使用它們嗎? 這是我的data.service.ts
方法參考上面。這些應該是可觀察的而不是承諾?
customerIUD(data: any) : Promise<any>{
return this.fooHttp
.postData(...);
}
customerFieldIUD(data: any) : Promise<any>{
return this.fooHttp
.postData(...);
}
一般來說可觀測量可以做到這一點ES6承諾做的工作。我不確定您的方法會發生什麼,但可能RxJS操作員可能會有所幫助。 – estus
我是新來的observables。你認爲如果我在這裏將'Promise'類型改爲'Observable',我可以使用rxjs操作符來觀察Observable嗎? – jhhoff02
目前還不清楚'fooHttp'是你自己還是第三方服務。如果它返回promise,則應該用'fromPromise'運算符將它們轉換爲observable,或者應該修改整個'fooHttp'服務以使用observables。 – estus