RxJava 库 方法switchIfEmpty 里面的指令,总是被执行。 然后将评估可观察对象是否为空,并将返回源或替代项。 是否有一种方法只允许传递一个仅在源可观察对象为空时才会执行的可观察对象供应商?
作为java的Optional也是一样的区别
- Optional.orElse()
- Optional.orElseGet()
//从缓存中获取数字
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);
}
谢谢
最佳答案
There is a method that allows to pass just a supplier of observable that will be execute only if the source observable is empty?
安Observable
可以看作是供应商:它将在稍后生成您的值(即:当您订阅时)
即使 switchIfEmpty
在您调用 getNumber
时被调用方法,Observable
作为 switchIfEmpty
的参数给出只会在你 subscribe
时发出给你的Observable
因此,从本质上讲,只有当源可观察对象为空时才会执行此可观察对象
private Observable<Integer> getNFromCache(){
return Observable.empty;
}
public Observable<Integer> getNumber(){
return getNFromCache(scope)
.switchIfEmpty(this::doHttpRequest);
}
private Observable<Integer> doHttpRequest(){
return Observable.of(1)
.doOnSubscribe(() -> System.out.pritnln("START !"))
}
public static void main(String...args) {
getNumber(); // display nothing => values are not emitted !
getNumber().subscribe(); // display "START !"
}
关于Java Rx Observable 方法 switchIfEmpty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35720357/