【问题标题】:angular 2: rxjs forkJoin http error continue stream角度2:rxjs forkJoin http错误继续流
【发布时间】:2017-04-20 14:12:16
【问题描述】:

我在 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 失败,我如何确保流继续?

【问题讨论】:

    标签: angular rxjs5


    【解决方案1】:

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

    当所有 observables 完成时,会发出每个 observables 的最后一个值。

    Observable.empty() 没有任何最后一个值,所以forkJoin 不知道如何emit the last value。如果你 Observable.of(undefined) 这意味着,你用 undefined 调用 next 方法然后 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

    【讨论】:

    猜你喜欢
    • 2013-10-16
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多