Angular Multiple订阅然后执行操作

时间:2019-05-30 13:41:14

标签: angular rxjs observable

我有一个使用订阅功能从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;})
}

}

2 个答案:

答案 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;
  }