首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >研究相同的共享,可在flatMap内部观察到自己的数据,不发射任何数据。是故意的?

研究相同的共享,可在flatMap内部观察到自己的数据,不发射任何数据。是故意的?
EN

Stack Overflow用户
提问于 2017-09-06 14:13:37
回答 2查看 40关注 0票数 0

尝试迁移到rx-java2时遇到了一个问题,即在它自己的flatMap中重新订阅可观察到的共享内容。需要此模式才能获得更新-刷新链:

  1. 从网络获取当前数据(如果多个观察者同时订阅源,则共享可观察以避免多个网络请求)。
  2. 修改数据并将其发送回服务器(可完成)
  3. 更新完成后再获取数据

整件事看起来是这样的:

代码语言:javascript
复制
@Test fun sharedTest() {
    val o = Observable.just(1).share()
    assertEquals(1, o
          .take(1)
          .flatMap({ 
             Completable.complete()
                        .andThen(o) })
          .blockingFirst())
}

测试失败的有:java.util.NoSuchElementException,如果o不是共享的,那么一切都能工作。

这种行为似乎是因为后一个订阅服务器是在原始值的单个值已经被分派并且只看到onComplete事件时出现的。

有没有人知道这是一种精心设计的行为,并以某种方式记录在案?当然有一个解决办法,但我需要知道原因,因为这有点烦人。这种方法在Rx1.x中有效。

目前正在使用2.1.3版本

编辑:

似乎没有合法的方式“重启”共享的可观察到的和它的副作用,因为没有保证其他用户目前没有收听。

EN

回答 2

Stack Overflow用户

发布于 2017-09-06 15:14:01

看一下“共享”的气泡图,你就会明白为什么它的行为是这样的:Observable.share()

share()发出订阅后发出的项,它不会重新发出先前发出的项。看看Observable.replay()的行为,这应该是您所期望的。

票数 0
EN

Stack Overflow用户

发布于 2017-09-07 06:38:00

似乎没有合法的方式“重启”共享的可观察到的和它的副作用,因为没有保证其他用户目前没有收听。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46077539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档