2 回答

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

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
也許這不是你要問的,但大多數(shù)時(shí)候(恕我直言)這種代碼的問題是它有時(shí)是同步的,有時(shí)是異步的。為避免這種情況,您可以使用rxjs運(yùn)算符of始終采用異步方式。
我最近用緩存服務(wù)做了類似的事情。這里的想法是Observable即使數(shù)據(jù)已經(jīng)加載,也總是返回一個(gè);
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;
}
添加回答
舉報(bào)