【发布时间】:2016-12-13 04:38:07
【问题描述】:
响应式编程与在事件侦听器(鼠标、键)中调用函数有何不同,因为两者都是异步事件流,那么响应式编程与传统事件侦听器调用相比有何优势?
【问题讨论】:
-
当链接的问题是java script时它是如何重复的
响应式编程与在事件侦听器(鼠标、键)中调用函数有何不同,因为两者都是异步事件流,那么响应式编程与传统事件侦听器调用相比有何优势?
【问题讨论】:
事件监听器实际上只有RxJava 提供的功能的一个子集,而这正是它试图解决的问题:
但让我们退后几步,如果您将 Observable 与 Iterator 进行比较(推送与拉取),会更容易理解。
Iterator.next() 相当于Observable.onNext() - 当下一个项目/事件发生时 - 消费它。
Iterator.hasNext() 等价于Observable.onComplete() - 它允许发布者通知订阅者没有更多事件可以使用(EventListener 模型中缺少的一件事)。
对于第三个,Observable.onError() 没有等价物,因为使用 Iterator,当您尝试获取 next() 或 remove() 时,您知道您可能会得到 NoSuchElementException、UnsupportedOperationException 或 IllegalStateException,而您可以捕获并处理其中的任何一个,因为您是同步进行的。
对于发布者,如果发生错误,除了崩溃之外,无法通知侦听器/订阅者。 onError() 是最后一个缺失的部分,以便 Observable 可以优雅地处理任何错误。
总而言之,Reactive Java 是为了修复事件模型中长期缺失的部分。通过提供那些缺失的部分,并通过提供函数式编程风格(支持 map、flatmap、filter 等),它有助于以一种自然、可读的方式组合异步调用,从而减少当编程风格是命令式时所必需的样板代码(例如,嵌套-loops) 并创建callback-hell。
【讨论】: