【问题标题】:Who holds the link in ReactiveX?谁拥有 ReactiveX 中的链接?
【发布时间】:2017-01-31 15:47:27
【问题描述】:

在Java 的PropertyChangeSupport observable 中维护着一个观察者列表。所以,如果 observable 被删除,观察者就会被垃圾回收。

所以,一个 observable 持有链接。

我的印象是,ReactiveX 并非如此。尽管 observable 有一个 subscribe 方法,但它返回一个 Subscription 对象。此对象是否包含链接?

如果我使用add() 将此对象添加到观察者,这将是让观察者持有链接的唯一方法吗?或者观察者是否仍然持有链接?

【问题讨论】:

    标签: java rx-java reactivex


    【解决方案1】:

    我认为 Observable 仍然保持与 Observer 的连接。查看下面的代码。

    private Observable<CurrencyRatesDTO> getCurrencyRatesObservable(Set<String> currencies) {
            return Observable.<CurrencyRatesDTO> create(sub -> {
                CurrencyRatesDTO currencyRatesDTO = restTemplate.getForEntity(
                        CURRENCY_SERVICE_API + RestUtil.QUERY_PARAM_START_SYMBOL
                                + RestUtil.getQueryParamStringForMultiValuedAttribute(SYMBOLS, currencies),
                        CurrencyRatesDTO.class).getBody();
                sub.onNext(currencyRatesDTO);
                sub.onCompleted();
            }).doOnNext(c -> log.debug("Currency rates were retrieved successfully."))
                    .doOnError(e -> log.error("An ERROR occurred while retrieving the currency rates.", e));
    }
    

    我们异步调用一些休息服务。一旦我们得到结果,我们使用 onNext 方法通知 Observer 并在向 Observer 发出完成信号之前发出该项目。我写了一些博客文章 [1][2][3],您可能会发现它们在 RxJava 环境中很有用。以下是我博客文章的一小部分摘录。据此,很明显 Observable 包含对 Observer 的引用。

    RxJava 提供 Observables 和 Observers。 Observables 可以发送值。观察者,通过订阅观察 Observables。当 Observable 发出一个值,当 Observable 说发生了错误时,观察者会收到通知。当 Observable 发送它不再有任何值要发出的信息时,它们也会收到通知。对应的函数是来自 Observer 接口的 onNext、onError 和 onCompleted()。 Subscription 的一个实例表示观察者和可观察对象之间的连接。如果您在此实例上调用 unsubscribe(),那么它将删除连接。

    希望这会有所帮助。快乐编码!

    [1]http://ravindraranwala.blogspot.com/2016/12/introducing-java-reactive-extentions-in.html [2]http://ravindraranwala.blogspot.com/2017/01/calling-exterenal-nosql-database.html [3]http://ravindraranwala.blogspot.com/2017/01/combine-emissions-of-multiple_16.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多