angular 2: rxjs forkJoin http错误继续流

angular 2: rxjs forkJoin http error continue stream

我在 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) 有效。但是,我的印象是仅从 catch 返回一个 empty Observable 会使调用无声地失败并且流会继续?

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

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

When all observables complete emit the last value from each.

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

How can I ensure that the stream continues if service2 fails?

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

此处演示:http://jsbin.com/babirakiyi/1/edit?js,console

感谢 @Yury Tarabanko 提供测试用例:

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