当前位置: 首页 > 知识库问答 >
问题:

Java-反应式编程与事件侦听器[重复]

燕扬
2023-03-14

反应式编程与在事件监听器(鼠标、键)中调用函数有何不同,因为两者都是异步事件流,那么反应式编程相对于传统事件监听器调用有何优势?

共有1个答案

洪光霁
2023-03-14

事件侦听器实际上只有RxJava提供的功能的一个子集,这正是它试图解决的问题:

但让我们回顾几个步骤,如果将可观察对象与迭代器(推与拉)进行比较,就更容易理解它是什么。

Iterator.next()等价于Observable.onNext()-当下一个项目/事件发生时-消耗它。

<代码>迭代器。hasNext()等效于可观察的。onComplete()-它允许发布者通知订阅者没有更多的事件可以使用(EventListener模型中缺少的一件事)。

对于第三个,可以观察到。onError()没有等价物,因为在迭代器中,当您尝试获取next()remove()时,您知道可能会获取NoTouchElementExceptionUnsupportedOperationExceptionIllegalStateException,并且您可以捕获和处理其中的任何一个,因为您是同步进行的。

对于发布者,如果发生错误,则无法通知监听器/订阅者崩溃OneError()是最后一个缺失的部分,它是为了让可观察的对象能够优雅地处理任何错误而制作的。

综上所述,ReactiveJava来修复事件模型中长期缺失的部分。通过提供这些缺失的部分,并提供函数式编程风格(支持映射、平面图、过滤器等),它有助于以自然、可读的方式组合异步调用,减少了编程风格势在必行时所需的样板代码(例如嵌套for循环)并创建回调地狱。

 类似资料:
  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 从元素中移除事件侦听器。 使用 EventTarget.removeEventListener() 从元素中删除一个事件监听器。 省略第四个参数 opts ,则默认使用 false 或者根据添加事件监听器时使用的选项来指定它。 const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts); con

  • 我有一个JPA(Hibernate)项目,其中包含从XML orm.XML和Beans创建的实体,我有一个EntityManager和update、persist、remove、findById、findAll方法,但我需要添加一个过滤器监听器来检查保存、还原等之前和之后的Beans(我需要将一些值设置为null以返回客户机) 问候。

  • 我开始更多地接受反应式编程,并试图将其应用于我的典型业务问题。我经常使用的一种模式是数据库驱动类。我有一些已定义的单元类,如ActionProfile,其实例由ActionProfileManager管理,它从数据库表中创建实例并将其存储在映射中 然而,如果我想让它更具反应性,那么创建地图会打破单子。我可以做的一种方法是将映射本身设置为可观察的,并返回一个monad来为客户端查找特定的键。然而,中

  • 我试图在我的Spring Boot应用程序中实现反应性kafka消费者,我正在看这些例子:https://github.com/reactor/reactor-kafka/blob/master/reactor-kafka-samples/src/main/java/reactor/kafka/samples/SampleScenarios.java 看起来在被动Kafka中还没有对Spring的