是否存在类似于forkJoin的可观察运算符,但只有在所有请求都失败时才会出错?

时间:2018-01-09 22:46:08

标签: rxjs observable angular5

例如

    return Observable.forkJoin([
            getData1(),
            getData2(),
            getData3(),
            getData4()
        ])

如果其中一个失败,订阅forkJoin observable的订阅者失败,是否有一个只有在所有失败的情况下失败的运算符?

2 个答案:

答案 0 :(得分:1)

这是rxjs设计的一部分,任何错误都会导致可观察链失败。

这听起来像你试图捕获的条件并不是真正的失败,而是一个正常的情况 - 如果你改变子可观察量以检测错误然后返回一个可以在下游检测到的值,例如a地图或过滤器,那么你将能够实现你想要的。

答案 1 :(得分:0)

如果您有兴趣从内部可观察量中获取错误,materialize可能会有所作为:

const pluckError = (obs: Observable<any>) =>
  obs.materialize().filter(x => x.kind === 'E')

Observable.forkJoin(
  obs1.pipe(pluckError),
  obs2.pipe(pluckError)
 ....
)

重要的是要注意外部observable不应该引发错误,因为它将终止整个observable,但你可以使用materialize捕获/或获取Notification元数据,并且只选择错误以使forkjoin完成。