在rxJava 1.x中,有可能做到这样的事情:
Observable.<Foo>create(subscriber -> {
...
getNewObservable().subscribe(Subscribers.wrap(subscriber));
})
GetNewObservable()也返回Observable<Foo>
我无法在rxJava 2中找到相同的方法。没有订阅方法接受Observable对象上的Emitter或ObservableEmitter。我想我可以这样做:
Observable.<Foo>create((ObservableEmitter<Foo> emitter) -> {
...
getNewObservable().subscribe(emitter::onNext, emitter::onError, emitter::onComplete);
})
但是我想知道rxJava 1中是否有更直接的方式。
感谢。
答案 0 :(得分:0)
1)执行您在评论中描述的内容的一种方式:
Observable.interval(...)
.map(n -> {
if (!permissionGranted)
throw new AccessDeniedException();
... // do work
return result;
})
2)另一种方式:
Observable.interval(...)
.flatMap(n -> {
if (permissionGranted) {
... // do work
return Observable.just(result);
} else {
return Observable.error(new AccessDeniedException());
}
})
3)另一种方式(只检查一次许可):
Observable.defer(() -> {
if (permissionGranted) {
return Observable.interval(...)
.map(n -> {
... // do work
return result;
});
} else {
return Observable.error(new AccessDeniedException());
}
})
4)还有一个(最多被动):
Completable.fromCallable(() -> {
if (!permissionGranted)
throw new AccessDeniedException();
return true; // returned value does not matter
})
.andThen(Observable.interval(...)
.map(n -> {
... // do work
return result;
})
)
你可以重构为:
askForPermission().andThen(getNewObservable())