2 回答

TA貢獻1773條經(jīng)驗 獲得超3個贊
通過將您的 observable 轉換為 promise 并使父函數(shù)異步,您可以這樣做:
async parentFunction() {
...
cond && await this.networkService.invoke(params).toPromise()
this.doSomething();
}

TA貢獻1864條經(jīng)驗 獲得超6個贊
也許這不是你要問的,但大多數(shù)時候(恕我直言)這種代碼的問題是它有時是同步的,有時是異步的。為避免這種情況,您可以使用rxjs運算符of始終采用異步方式。
我最近用緩存服務做了類似的事情。這里的想法是Observable即使數(shù)據(jù)已經(jīng)加載,也總是返回一個;
private data: SomeData[] = null;
private isLoadedOrOnItsWay = false;
private subject: Subject<SomeData[]> = new Subject<SomeData[]>();
constructor(private dataService: DataService) { }
public getAll(): Observable<SomeData[]> {
if (!this.isLoadedOrOnItsWay) {
this.isLoadedOrOnItsWay = true;
this.dataService.getData<SomeData[]>().subscribe(x => {
// Load from service...
this.data = x;
this.subject.next(x);
});
} else if (this.data) {
// Get from cache
return of(this.data);
}
// Return subject and wait for data to be loaded
return this.subject;
}
添加回答
舉報