angular 2:rxjs forkJoin http error continue stream

时间:2017-04-20 14:12:16

标签: angular rxjs5

我在forkJoin中呼叫2个服务,第二个服务可能会失败,但如果第二个服务失败,我希望stream继续。

到目前为止我所拥有的:

Observable.forkJoin([
    this.http.get('/service1'),
    this.http.get('/service2').catch(error => Observable.empty())
])
    .do(([result1, result2]: any[]) => {
        //When service2 fails, I never get in here with .empty()

    })

Observable.of(undefined)Observable.of(error)有效。但是,我的印象是,从empty Observable返回catch会使呼叫无声地失败并且流会继续吗?

如果service2失败,如何确保流继续?

1 个答案:

答案 0 :(得分:5)

Observable.empty()只需调用complete对象的observer方法,因此它不会执行任何其他操作。 这就是forkJoin工作的方式:

  

当所有可观测量完成时,从每个观察者发出最后一个值。

Observable.empty()没有任何上一个值,因此forkJoin无法知道如何emit the last value。如果您Observable.of(undefined)这意味着,请使用next调用undefined方法,然后调用complete方法。所以最后一个值是undefined

  

如果service2失败,如何确保流继续?

您可以添加错误处理程序和完整的处理程序以进行测试。

在这里演示:http://jsbin.com/babirakiyi/1/edit?js,console

感谢@Yury Tarabanko了解测试用例:

https://github.com/ReactiveX/rxjs/blob/524259a9bf2154824ddced89efc71c2e4149b2a9/spec/observables/forkJoin-spec.ts#L165-L174