可观察到的嵌套回调

时间:2020-01-10 21:00:52

标签: typescript rxjs observable

我有一个相对复杂的嵌套可观察对象,它切换到其他可观察对象,并且需要从每个先前的可观察对象返回的信息。像这样:

of(1).pipe(
  switchMap(res =>
    of(2).pipe(
      switchMap(res2 =>
        of(3).pipe(
          switchMap(res3 => {
              console.log(res)
              console.log(res2)
              console.log(res3)
              return of()
            }
          )
        )
      )
    )
  )
)

有没有一种方法可以在没有切换映射的嵌套回调的情况下完成此任务?主要问题是必须记住每个嵌套可观察对象发出的值。

2 个答案:

答案 0 :(得分:3)

好的。您需要做的就是重新输入以前的值:

self

of(1).pipe(
  switchMap(res => of({ res1: res, res2: 2 })),
  switchMap(res => of({ ...res, res3: 3 })
).subscribe(...)

答案 1 :(得分:0)

我认为这可以做到:

of(1).pipe(
  switchMap(res => forkJoin(of(res), of(2))), // Returns [1, 2]
  switchMap(res => forkJoin(...res.map(v => of(v)), of(3))), // forkJoin(of(1), of(2), of(3))
  switchMap(res => forkJoin(...res.map(v => of(v)), of(4))),
).subscribe(console.log) // 1, 2, 3, 4]