【发布时间】:2022-06-14 03:52:38
【问题描述】:
我需要能够将 2 个 forkJoins 链接在一起,因为第二组 observables 需要第一组 observables 的输出。
问题是,如果我在 .pipe(map(...)) 内执行第二个,observable 将返回另一个 observable,而不是先解析组 1,然后再解析组 2。这意味着我必须在 subscribe 中有一个 subscribe 和两个单独的错误处理程序像这样。
var o = forkJoin(
a: getObservableA(),
b: getObservableB(),
c: getObservableC()
).pipe(
map( result => {
a2: processA(result.a),
b2: processB(result.b),
c2: processC(result.c)
});
)
o.subscribe( x => {
x.subscribe( y => {
// It worked, process output {a2:..,b2... etc
}, errorY => {... errors for part 2 })
}, errorX => {... errors for part 1 })
我也试过了:
forkJoin(
a: getObservableA().pipe(map(processA(result.a)),
b: getObservableB().pipe(map(processB(result.b)),
c: getObservableC().pipe(map(processC(result.c))
).subscribe( x => ... )
但这给出了一个像 Observable<{a: Observable, b: Observable, c: Observable}> 这样的对象,这意味着这些 processX 调用没有被订阅和执行。
我真的不需要来自任何可观察对象的数据,只是为了获取第 1 组中的数据并在第 2 组中使用它。
有没有一种方法可以轻松地将两个 forkJoin 链接在一起,这样可以让一个错误处理程序来捕获任何错误并避免嵌套订阅,我被告知这是一种不好的模式?
【问题讨论】:
标签: typescript rxjs