在另一个订阅中返回订阅数据

Posted

技术标签:

【中文标题】在另一个订阅中返回订阅数据【英文标题】:Return a subscription data within another subscription 【发布时间】:2021-12-05 10:58:43 【问题描述】:
this.subscription1$
      .pipe(
        takeUntil(this.ngUnsubscribe),
        map((data1) => 
          return data1.map((data2, index) => 
            // we should return here the value, not the subscription
            return this.subscription2(index + 1).pipe(
              takeUntil(this.ngUnsubscribe),
              map((data3) => 
                return of(data3);
              )
            );
          );
        ),
      )
      .subscribe((data) => 
        console.log('FINAL: ', data);
      );

最后的控制台显示:

[可观察,可观察,可观察,可观察]

我怎样才能直接获取其他订阅数据而不获取任何可观察的数据?

【问题讨论】:

【参考方案1】:

取决于您希望如何组合订阅 2 结果。 如果您想等待全部完成,您可以使用 forkJoin

this.subscription1$.pipe(
  takeUntil(this.ngUnsubscribe),
  switchMap((data1) => 
    return forkJoin(...data1.map((data2, index) =>  this.subscription2(index + 1)))
  )
).subscribe((data) => 
  console.log('FINAL: ', data);
)

也许您希望combineLatest 关注特定变化。根据您的用例在此处选择合适的运算符

【讨论】:

我只需要最新的数据。我不需要合并任何结果,只需获取最后一个 也试过了,但没有触发最终控制台 你确定所有的subscription2 observables 都发出/关闭了吗?

以上是关于在另一个订阅中返回订阅数据的主要内容,如果未能解决你的问题,请参考以下文章

返回 Django 石墨烯订阅中订阅事件的初始数据

Angular 6 - 无法订阅从服务返回的数据

graphql 订阅返回空数据

订阅可观察对象返回未定义

Angular 2 从 RxJs 订阅返回数据

prisma2 订阅返回数据:null