Rxjs 是否有一个类似于forkJoin的可观察操作符,但只有在所有请求都失败时才会出错?

Rxjs 是否有一个类似于forkJoin的可观察操作符,但只有在所有请求都失败时才会出错?,rxjs,observable,angular5,Rxjs,Observable,Angular5,比如说 return Observable.forkJoin([ getData1(), getData2(), getData3(), getData4() ]) 如果其中一个失败,订阅forkJoin observable的订阅者就会失败,是否有一个操作员只有在所有的都失败时才会失败?rxjs设计的一部分是,任何错误都会导致observable链失败 听起来,您试图捕获的

比如说

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

如果其中一个失败,订阅forkJoin observable的订阅者就会失败,是否有一个操作员只有在所有的都失败时才会失败?

rxjs设计的一部分是,任何错误都会导致observable链失败


听起来,您试图捕获的条件并不是真正的失败,而是一种正常情况-如果您更改子观测值以检测错误,然后返回一个值,该值可以通过映射或过滤器之类的东西在下游检测到,然后,您将能够实现您想要的目标。

如果您对从内部观测值中获取错误感兴趣,
物化可能是一种可行的方法:

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

Observable.forkJoin(
  obs1.pipe(pluckError),
  obs2.pipe(pluckError)
 ....
)
常量错误=(obs:可观察)=>
obs.materialize().filter(x=>x.kind=='E')
可观察的分叉连接(
obs1.管道(错误),
obs2.管道(错误)
....
)

重要的是要注意,outer observable不应引发错误,因为它将终止整个observable,但您可以使用materialize捕获/或获取通知元数据,并且只拾取错误以使forkjoin完成。

因此,如果它转到订阅服务器的
catch
语句,我就可以了,但是我对其他调用返回的所有信息进行了分析,我可以在没有
forkjoin
的情况下进行4次调用,但我想知道是否有更简单的方法错误是什么-http请求失败了吗?或者这是一个超时?如果其中一个内部对象出错,您希望返回的可观察对象是什么样子?换句话说,如果第i个可观测值出错,数组中的第i个值应该是什么?