我将从我想要实现的目标开始。
如果例外,我有能力处理它并继续流动, 但是当我尝试添加超时管理时,我失败了。
这是我的代码
public static void main(String[] args) {
createObservables(false, true); // stalls for timeout
zip();
}
private static void createObservables(final boolean throwException,
final boolean stall) {
obs1 = Observable.just(1);
obs1 = obs1.map(new Func1<Integer, Integer>() {
@Override public Integer call(Integer integer) {
int i = 0;
if (throwException)
getObj().equals("");
if (stall)
zzz(10);
return ++integer;
}
});
obs2 = Observable.just(111);
}
private static void zip() {
System.out.println("**Zip**");
obs1 = obs1.onErrorReturn(new Func1<Throwable, Integer>() {
@Override public Integer call(Throwable throwable) {
return 999;
}
});
obs1 = obs1.timeout(5, TimeUnit.SECONDS);
Observable.zip(obs1, obs2, new Func2<Integer, Integer, ArrayList<Integer>>() {
@Override
public ArrayList<Integer> call(Integer integer1, Integer integer2) {
ArrayList<Integer> integers = new ArrayList<Integer>();
integers.add(integer1);
integers.add(integer2);
return integers;
}
}).subscribe(new Observer<Object>() {....}
);
}
现在,当我打电话
createObservables(false , false); // no exceptions and timeouts
我接下来 - [2,111] 然后我打电话给
createObservables(true, false); // throw exception in one method only
我接下来 - [999,111] - 这就是我想要的。异常和第二种方法的结果。 但是当我打电话时
createObservables(false, true); // stall on timeout
我只得到onError 但我想得到另一种方法的答案 感谢。
答案 0 :(得分:0)
尝试为超时值创建一个observable,在这种情况下,您需要与错误案例相同的值:
Observable obs1Timeout = Observable.just(999);
然后在你的超时策略中给它这个observable作为在超时情况下使用的回退:
obs1 = obs1.timeout(5, TimeUnit.SECONDS, obs1Timeout);