java - RxJava 的 Observable.create 与 Observable.just(1).flatMap

标签 java reactive-programming rx-java

我一直在做一些 RxJava,我经常发现自己需要将一些现有代码结果转换为可观察对象。

例如让我们采取以下内容:

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()
    }
}

return Observable
    .just(1)
    .flatMap((_) -> Observable.from(request.executeAsync()));

在我看来,使用 flatMap 选项更简单,因为我不必为订阅者逻辑操心。

create 上使用 flatMap 有什么陷阱吗?是否有首选的 Rx 方式来简化集成?

谢谢

最佳答案

您可以改用 defer :

Observable.defer(() -> request.executeAsync())
          .concatMap(Observable::from)
          .subscribe();

关于java - RxJava 的 Observable.create 与 Observable.just(1).flatMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008098/

相关文章:

r - 当变量超过阈值时触发 shiny 事件

android - 在 RxJava 中后台线程完成后如何访问主线程?

java - RxJava : Call network multiple times with increasing delay, 忽略错误

java - 实体属性可以被同一实体的其他属性映射吗?

java - 了解 iterator.next 功能

java - jdbi 抛出 SQLException : Unknown system variable 'tx_read_only'

java - 使用 HashMap 或其他方法对 ArrayList 求和

design-patterns - elm 中的翻译模式是什么?

java - 如何更新数组内文档的一部分? (MongoDB Spring Boot 响应式(Reactive))

java - 循环直到条件在 RxJava 中变为真