2 回答
![?](http://img1.sycdn.imooc.com/533e564d0001308602000200-100-100.jpg)
TA贡献1773条经验 获得超3个赞
通过将您的 observable 转换为 promise 并使父函数异步,您可以这样做:
async parentFunction() {
...
cond && await this.networkService.invoke(params).toPromise()
this.doSomething();
}
![?](http://img1.sycdn.imooc.com/533e50ed0001cc5b02000200-100-100.jpg)
TA贡献1864条经验 获得超6个赞
也许这不是你要问的,但大多数时候(恕我直言)这种代码的问题是它有时是同步的,有时是异步的。为避免这种情况,您可以使用rxjs运算符of始终采用异步方式。
我最近用缓存服务做了类似的事情。这里的想法是Observable即使数据已经加载,也总是返回一个;
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;
}
添加回答
举报