angular 2:rxjs forkJoin http错误继续流

Thi*_*ibs 2 rxjs5 angular

我在a中调用2个服务forkJoin,第二个服务可能会失败,但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()

    })
Run Code Online (Sandbox Code Playgroud)

Observable.of(undefined)Observable.of(error)工作.但是,我的印象是,只返回一个empty Observablecatch将使呼叫失败默默流会继续下去吗?

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

Tie*_*han 5

Observable.empty()只需调用对象的complete方法observer,所以它不会做任何其他事情.这就是forkJoin工作方式:

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

Observable.empty()没有任何最后的价值,所以forkJoin不知道如何emit the last value.如果你Observable.of(undefined)这意味着,你nextundefinedthen complete方法调用方法就会调用.所以最后一个值是undefined.

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

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

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

感谢@Yury Tarabanko测试用例:

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