我有一个使用订阅功能从API请求数据的功能。我试图重新编写它,以便在所有API调用完成后返回一个布尔值。有没有更好的方法来写这个?
我当前的代码:
username
我当时正在考虑尝试创建一个Observable,以监听嵌套订阅的更改:(未经测试的代码!)
public res1=null;
public res2=null;
getData(){
this.svc.getData1().subscribe(x={this.res1=x;})
this.svc.getData2().subscribe(x={this.res2=x;})
}
}
答案 0 :(得分:1)
一种实现方法是使用CombineLatest。当所有可观察对象都发出一个值时,“合并最新”将发出一个值。
combineLatest(observeable1$, observable2$).subscribe(
// when both have submitted a value. return what you like.
);
如果您的观察结果只能解决一次。您也可以使用forkJoin。这类似于promise.All
答案 1 :(得分:0)
您可以使用合并运算符合并可观察对象并并行订阅。
getData(): Observable<boolean>{
let isCompleted: Observable<boolean>;
merge(this.svc.getData1(), this.svc.getData2()).subscribe(
(val) => {console.log(val) },
(err) => { console.log(err) },
()=>{isCompleted = of (true); });
return isCompleted;
}