我在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失败,如何确保流继续?
答案 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了解测试用例: