我有這樣的功能;
openModalWhenRemoveItem() {
callRemoveService();
openMyModal();
}
callRemoveService()函式有一個訂閱并且它是異步函式,該openMyModal()函式必須在之后呼叫callRemoteService()
callRemoveService() {
combineLatest(myAccountSelector$, myCompanySelector$).pipe(
switchMap(res) =>
this.myService.remove(res[0].id, res[1].id))
.subscribe((res)=> console.log(res))
}
我需要創建一個函式,callRemoveService()在呼叫openModal(). 我想嘗試,async await但我找不到解決方案。我這樣試過:
async callRemoveService() {
await combineLatest(myAccountSelector$, myCompanySelector$).pipe(
switchMap(res) =>
this.myService.remove(res[0].id, res[1].id))
.subscribe((res)=> console.log(res))
}
openModalWhenRemoveItem() {
callRemoveService().then(() => {openMyModal();});
}
但它不起作用。我無法將openMyModal()功能放入訂閱中。
uj5u.com熱心網友回復:
您的情況的解決方案是Observable從callRemoveService方法回傳而不是訂閱它。這種方法的警告是,您需要subscribe在所有呼叫的地方呼叫callRemoveService。
如果你這樣做,那么它是微不足道的:
callRemoveService(): Observable<any> {
return combineLatest(myAccountSelector$, myCompanySelector$).pipe(
switchMap(res) =>
this.myService.remove(res[0].id, res[1].id));
}
然后你的openModalWhenRemoveItem方法變成這樣:
openModalWhenRemoveItem() {
callRemoveService().subscribe(() => {
openMyModal();
};
}
uj5u.com熱心網友回復:
combineLatest是一個 RxJS 運算子,它回傳一個 Observable。你不能簡單地等待一個 Observable,它不是一個 Promise。只需訂閱它。
callRemoveService(): Observable<any> {
return combineLatest(myAccountSelector$, myCompanySelector$);
}
進而 :
openModalWhenRemoveItem() {
callRemoveService().subscribe(openMyModal);
}
或者,您可以使用lastValueFrom運算子將 Observable 轉換為 Promise ,并等待它:
callRemoveService(): Promise<any> {
return lastValueFrom( combineLatest(myAccountSelector$, myCompanySelector$)) ;
}
async openModalWhenRemoveItem() {
await callRemoveService();
openMyModal();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346268.html
標籤:javascript 有角的 打字稿
下一篇:在Nodejs中允許跨域
