如何在RxJava中的自定义Observable中获得观察者取消订阅操作的通知

维克多

我正在尝试将一些基于侦听器模式的API包装到Observable中。我的代码大致如下所示。

def myObservable = Observable.create({ aSubscriber ->
    val listener = {event -> 
      aSubscriber.onNext(event);                
    }
    existingEventSource.addListener(listener)
})

但是,当观察者调用subscription.unscribe()时,我希望我的可观察对象立即将其侦听器从基础的existingEventSource中移除。我怎样才能实现这个目标?

米格尔·拉维尼(Miguel Lavigne)

Subscriber实际上抽象类有一个方法add,可让您添加Subscriptions,而订阅服务器将取消订阅。

def myObservable = Observable.create({ aSubscriber ->
    val listener = {event -> 
      aSubscriber.onNext(event);                
    }
    existingEventSource.addListener(listener)

    // Adds a lambda to be executed when the Subscriber un-subscribes from your Observable
    aSubscriber.add(Subscriptions.create(() -> existingEventSource.removeListener(listener)));
})

想想aSubscriber作为Observer订阅了你Observable; 我们称它为Subscriber只要Subscriber仍订阅Observable,则Observable可以发出值。但是当Subscriber取消订阅时,它应该停止。但是,如果我们希望在Subscriber取消订阅时得到通知,则可以注册一个Action在其发生时要运行的程序。这就是该add方法的用途。正如@dwursteisen在评论中提到的那样;您基本上是在注册一个lambda,该lambda将在订阅者退订时执行。

也可以让订阅退订到其他调度程序上。MainThreadSubscriptionrxanroid项目如何做到这一点的例子。

这是一个如何使用它取消订阅主线程的示例

aSubscriber.add(new MainThreadSubscription() {
    @Override
    protected void onUnsubscribe() {
        existingEventSource.removeListener(listener);
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 RxJava2 中的自定义 Observable 中获得观察者处理操作的通知

来自分类Dev

如何在订阅中获得观察者的结果?

来自分类Dev

在fuelphp中调用自定义观察者

来自分类Dev

如何在 Flutter 中设置 Firebase Analytics 自定义事件而不在每个屏幕中传递“分析/观察者”对象

来自分类Dev

Magento-如何在观察者中不使用优惠券代码的情况下添加自定义折扣

来自分类Dev

获取观察者中简单产品的选定自定义期权价格

来自分类Dev

如何在 Objective-C 中添加观察者并在 Swift 3 中触发通知

来自分类Dev

如何在Redux-Sagas中设置并随后取消多个观察者

来自分类Dev

如何在RxJava中的动态列表上创建观察者?

来自分类Dev

创建 Kubernetes 服务时,这些观察者中的哪一个首先被称为“kube 代理”或“自定义观察者”

来自分类Dev

在异步 grpc 存根中取消订阅观察者 - Java / Kotlin

来自分类Dev

AsyncTask中的可观察者/订阅者

来自分类Dev

如何在Rust中实现观察者模式?

来自分类Dev

Magento 2.0如何在观察者中重定向

来自分类Dev

如何在订阅时获取观察者的“当前”值

来自分类Dev

Java观察者模式-如何在更新(通知)循环/迭代期间删除观察者?

来自分类Dev

如何在paypal api中获得有关用户取消订阅的通知?

来自分类Dev

“观察者”与“通知”(在属性块中)与“观察者”与“侦听器”之间的区别

来自分类Dev

如何在自定义通知textview中设置值

来自分类Dev

如何在Android中创建自定义通知

来自分类Dev

如何在自定义通知textview中设置值

来自分类Dev

如何在 Android 的通知中显示自定义文本

来自分类Dev

如何在 Dynamics 中创建自定义通知

来自分类Dev

通知中心观察者未在 swift 4 中调用

来自分类Dev

xib中的自定义UIView通知取消分配错误

来自分类Dev

如何在Spark中对GroupedData进行自定义操作?

来自分类Dev

如何在REST中处理自定义操作?

来自分类Dev

在firebase中,如何删除所有观察者,而不是特定参考的观察者

来自分类Dev

如何从localStorage或Angular2中的其他观察者作为观察者返回?

Related 相关文章

  1. 1

    如何在 RxJava2 中的自定义 Observable 中获得观察者处理操作的通知

  2. 2

    如何在订阅中获得观察者的结果?

  3. 3

    在fuelphp中调用自定义观察者

  4. 4

    如何在 Flutter 中设置 Firebase Analytics 自定义事件而不在每个屏幕中传递“分析/观察者”对象

  5. 5

    Magento-如何在观察者中不使用优惠券代码的情况下添加自定义折扣

  6. 6

    获取观察者中简单产品的选定自定义期权价格

  7. 7

    如何在 Objective-C 中添加观察者并在 Swift 3 中触发通知

  8. 8

    如何在Redux-Sagas中设置并随后取消多个观察者

  9. 9

    如何在RxJava中的动态列表上创建观察者?

  10. 10

    创建 Kubernetes 服务时,这些观察者中的哪一个首先被称为“kube 代理”或“自定义观察者”

  11. 11

    在异步 grpc 存根中取消订阅观察者 - Java / Kotlin

  12. 12

    AsyncTask中的可观察者/订阅者

  13. 13

    如何在Rust中实现观察者模式?

  14. 14

    Magento 2.0如何在观察者中重定向

  15. 15

    如何在订阅时获取观察者的“当前”值

  16. 16

    Java观察者模式-如何在更新(通知)循环/迭代期间删除观察者?

  17. 17

    如何在paypal api中获得有关用户取消订阅的通知?

  18. 18

    “观察者”与“通知”(在属性块中)与“观察者”与“侦听器”之间的区别

  19. 19

    如何在自定义通知textview中设置值

  20. 20

    如何在Android中创建自定义通知

  21. 21

    如何在自定义通知textview中设置值

  22. 22

    如何在 Android 的通知中显示自定义文本

  23. 23

    如何在 Dynamics 中创建自定义通知

  24. 24

    通知中心观察者未在 swift 4 中调用

  25. 25

    xib中的自定义UIView通知取消分配错误

  26. 26

    如何在Spark中对GroupedData进行自定义操作?

  27. 27

    如何在REST中处理自定义操作?

  28. 28

    在firebase中,如何删除所有观察者,而不是特定参考的观察者

  29. 29

    如何从localStorage或Angular2中的其他观察者作为观察者返回?

热门标签

归档