angular - 我想调用两个可观察对象,第二个在 Angular2 中的第一个之后调用

标签 angular rxjs observable angular2-observables

我想调用两个可观察对象,第二个在第一个之后调用。

我有一个先订阅的可观察对象。 然后我希望第二个可观察对象嵌套在第一个可观察对象中。

我想在下面合并这两个订阅:

this.serviceA.getData()
.takeUntil(destroyed$)
.subscribe(item => {

});

this.serviceB.getData()
.takeUntil(destroyed$)
.subscribe(item => {

});

这是我展示我想做的事情的尝试(更新)

  destroyed$: Subject<any> = new Subject<any>();

  ngOnInit(): void {
    this.serviceA.getData
      .takeUntil(this.destroyed$)
      .concatMap(dataA => {
        this.myDataA= dataA;    

        return this.serviceB.getData;
      })
      .takeUntil(this.destroyed$)
      .subscribe(dataB => {            

         this.myDataA.forEach(item => {
             item.visible = dataB.find(o => o.id === item.label).isVisible;
         }); 

      });
  };

  ngOnDestroy(): void {
    this.destroyed$.next(true);
    this.destroyed$.complete();
  };

目的是在第一个订阅之后调用第二个嵌套订阅,因为在第二个订阅中需要来自第一个订阅者的数据

最佳答案

接受的答案不正确。 forkJoin 将同时订阅两个 Observables,而您希望先订阅第一个,然后在它完成订阅第二个。

这通常是使用 concatMap 完成的运算符(operator):

this.serviceA.getData()
  .concatMap(response => this.serviceB.getData())
  .subscribe(...)

如果你想结合这两个响应,可以在 serviceB.getData() 之后使用 map

this.serviceA.getData()
  .concatMap(responseA => this.serviceB.getData()
    .map(responseB => /* combine responseA and responseB */ ))
  .subscribe(...)

关于angular - 我想调用两个可观察对象,第二个在 Angular2 中的第一个之后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748750/

相关文章:

angular - 在 Nrwl Nx 库中导入 Angular Material 主题

javascript - renderer2 selectRootElement() 不匹配任何元素

system.reactive - 将 Observable 拆分到窗口中

javascript - 在 Angular 中使用 Rxjs 更新来自不同 Json 源的 Json 中的数据

rxjs - 在 map 函数中使用 Observable 的先前值

typescript - p-tabMenu 抛出 "No provider for Router!"异常

angular - 类似 promise 风格的顺序可观察对象

javascript - 如何将代码从 rxjs v5 转换为 rxjs v6 以进行 catch?

java - 没有从数据库的 LiveData 观察者获取数据

angular - 通过单击按钮重置垫选择值