【问题标题】:RxJava: Get observable in onCompleteRxJava:在 onComplete 中可观察到
【发布时间】:2017-02-17 16:54:32
【问题描述】:

我可能在这里很明显,但是在 Observer 的 onComplete() 方法中,我如何获得 Observable 调用了 onComplete 的位置?

更详细一点,假设您有以下内容:

event.subscribe((e) -> {
},
(error) -> {
},
() -> {
// HERE - How do I tell what event source is completing?
}

【问题讨论】:

  • 发布一些代码示例,因为我不明白这个问题。 onComplete 在您创建 Observable 的同一链上调用
  • @breakline 添加了一些细节
  • 如果我理解正确:你不能。但是我也不明白你为什么想要它。您可以存储订阅本身并在 onCompleted 中引用它。无论您想做什么,都应该将其包含在链本身中,因为在 onCompleted 之后,您的 Observable 基本上不再存在了。
  • 当然你也可以将一个可观察对象存储在一个变量中,这样你就可以引用它

标签: java rx-java


【解决方案1】:

'event' 是一个可观察的。 observable 发出的每个项目都将通过操作符链。在项目通过运营商后,它将被重定向到订阅者,这发生在“订阅”中。订阅提供了两个重载。一个用于流(事件)的每次发射,第二个用于注意到“事件”-Observable(流)已经完成。

让我们看一个 List,它将被转换为 Observable。如果您将 Array 转换为 Observable :

Observable<Integer> integerObservable = Observable.fromArray(1, 2, 3);

订阅中的每个值 1、2、3 onNext 都会调用您。在 3 被推送到 onNext 之后,observable 将是“onComplete”。看看 gitHub 上的实现,看看发生了什么。

回到你的问题:我如何知道哪个事件源正在完成? 这将是 Observable 的“事件”,因为您正在订阅它。

【讨论】:

  • 但是如何在onComplete() 方法中获得对event 对象的引用(其中event 对象在封闭的lambda 范围内不可用)?
  • 你想用这个参考做什么?也许还有另一种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
相关资源
最近更新 更多