我一直在学习RxJava,经常遇到需要将一些现有代码的结果转换成Observable的情况。
例如,我们来看以下示例:
ListenableFuture<T> result = request.executeAsync();
return result;
所以将其转换为可观察对象的最简单方法是执行以下操作:
ListenableFuture<T> result = request.executeAsync();
return Observable.from(result);
问题在于executeAsync
在调用时实际上执行了请求。我想要的是将该调用延迟到被订阅的可观察对象。
我考虑了两种方法来实现这一点。
return Observable.create { aSubscriber ->
if (!aSubscriber.unsubscribed) {
aSubscriber.onNext(request.executeAsync())
}
if (!aSubscriber.unsubscribed) {
aSubscriber.onCompleted()
}
}
and
return Observable
.just(1)
.flatMap((_) -> Observable.from(request.executeAsync()));
在我看来,使用flatMap
选项更简单,因为我不需要关心订阅者逻辑。
在使用create
的时候有什么陷阱吗?有没有更好的Rx方式来简化集成?
谢谢