假设我们有3个服务,employeeTitle,employeeName, employeeLocation。如果所有服务三项服务均抛出错误 employeeTitle,employeeName和employeeLocation仅服务 抛出1个错误?根据文档,这应该是 这是正确的行为吗?如果只有employeeTitle抛出该怎么办 错误和其他服务是否成功?根据我的理解 如果employeeTitle抛出异常,则zip仍将抛出1 仅例外,此例外将是employeeTitle的服务 错误。我在正确的轨道上吗?
-在下面的代码中,我期望zip错误出现在getEmployeeInfo()内的第一个onErrorResumeNext中
Single<Model> getCompositeEmployeeInfo(){
return Single.zip(
api.employeeTitle()
.subscribeOn(Schedulers.newThread()),
api.employeeName()
.subscribeOn(Schedulers.newThread()),
api.employeeLocation()
.subscribeOn(Schedulers.newThread()),
new Function3<EmployeeTitle, EmployeeName, EmployeeLocation>() {
@public Model apply(EmployeeTitle empTitle, EmployeeName empName,
EmployeeLocation empLocation){
//some logic
}
Single<Model2> getEmployeeInfo(){
return getCompositeEmployeeInfo()
.observeOn(AndroidSchedulers.mainThread())
.onErrorResumeNext(throwable-> {
return Single.error(throwable}//I am expecting only 1 error(if
//more than one error is thrown) from
//zip, either employeeTitle, employeeName or employeeLocation.
)
.flatMap(model -> {
//some logic
return getEmployeePreference();
.observeOn(AndroidSchedulers.mainThread())
.onErrorResumeNext(throwable -> {
return Single.error(throwable);
})
.flatMap(employeePreference -> {
//some logic
return Single.just(result);
}); } }
答案 0 :(得分:1)
“反应性合同”规定只能存在一个终止条件,即onError
或onComplete
。当您将多个观察者链与zip()
结合使用时,来自三个观察者链的终止条件将被合并为一个。
如果第一个观察者链引发错误,则仍然有可能在其他两个观察者链中引发错误。但是,zip()
运算符仅发出第一个错误。另外,由于观察者链在不同的线程上运行,因此将争分夺秒地报告错误。这是不确定的。
在观察者链终止后 ,或者当不再有下游处理错误的方式时,在观察者链中引发的错误将传递给全局处理程序。