RxJava Lib 方法 switchIfEmpty 里面的指令总是被执行。 如果observable是空的,那么将重新评估,并且将返回源或替代。 是否有一种方法允许只传递一个observable供应商,只有当源observable为空时才会执行该供应商?
作为一个java可选是
之间的相同区别//从缓存中获取数字
private Observable<Integer> getNFromCache(){
return Observable.empty;
}
public Observable<Integer> getNumber(){
return getNFromCache(scope)
.switchIfEmpty(this::doHttpRequest);
}
private Observable<Integer> doHttoRequest(){
return Observable.of(1);
}
我的解决方案
//try to get number from cache
public Observable<Integer> getNFromCache(){
return Observable.empty;
}
private Observable<Integer> getNumber(){
Observable<Integer> result= getNFromCache(scope);
return !result.isEmpty().blocking().first()?result:
result.switchIfEmpty(this::doHttpRequest);
}
public Observable<Integer> doHttoRequest(){
return Observable.of(1);
}
谢谢
答案 0 :(得分:1)
有一种方法允许只传递一个observable供应商,只有在源observable为空时才会执行该供应商?
可以将for(Object element : sourceArrayList) {
targetArrayList.add(element);
}
视为供应商:它将在以后生成您的值(即:您订阅时)
即使在您调用Observable
方法时调用switchIfEmpty
,getNumber
作为Observable
的参数只会在您switchIfEmpty
时发出到你的subscribe
因此,本质上,只有当源observable为空时才会执行此observable
Observable