【问题标题】:How to call forkJoin in switchOperator?如何在switchOperator中调用forkJoin?
【发布时间】:2020-09-29 22:46:27
【问题描述】:

我已经尝试在switchMap中调用forkJoin:

this.route.params.pipe(
  pluck('cadnum'),
  tap((cadnum) => {
    this.r1.repositoryModel.findallversionbycadnum.model.cadnum = cadnum;
    this.r2.repositoryModel.findallversionbycadnum.model.cadnum = cadnum;
    this.r3.repositoryModel.findallversionbycadnum.model.cadnum = cadnum;
  }),
  switchMap(() => forkJoin(
    egrn.parcels.versions.load(),
    egrn.premisses.versions.load(),
    egrn.rights.versions.load()).pipe(
      tap(([res1, res2, res3]) => {
        egrn.parcels.versions.set(res1);
        egrn.premisses.versions.set(res2);
        egrn.rights.versions.set(res3);
      }),
      catchError((error) => of(error)),
    ),
  ),
)).subscribe((response) => {
  console.log(response);
});

但是不行,怎么在switchMap里面调用forkJoin

【问题讨论】:

    标签: typescript rxjs rxjs5


    【解决方案1】:

    要 forkJoin 发出结果,所有egrn.parcels.versions.load(), egrn.premisses.versions.load(), egrn.rights.versions.load() 都必须是完整的。

    您可以尝试将forkJoin 切换为combineLatest 或在第一次发射后使用take(1) 结束流,例如:egrn.parcels.versions.load().pipe(take(1))

    【讨论】:

    • 你能用例子解释更多吗?
    • 它不起作用,因为我应该订阅forkJoin。 SwitchMap 必须这样做,但不是
    猜你喜欢
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多