Reactive Programming与调用事件监听器(鼠标,键)中的函数有何不同,因为两者都是异步事件流,所以Reactive的优势与传统的Event侦听器调用有什么关系?
答案 0 :(得分:5)
事件监听器实际上只有RxJava提供的功能的一部分,而这正是它试图解决的问题:
但是,让我们备份几个步骤,如果将Observable与Iterator(推送与拉动)进行比较,则更容易理解callback-hell是什么。
Iterator.next()
相当于Observable.onNext()
- 当下一个项目/事件发生时 - 消耗它。
Iterator.hasNext()
等同于Observable.onComplete()
- 它允许发布者通知订阅者不再需要使用的事件(EventListener模型中缺少一件事)。
对于第三个,Observable.onError()
没有等价物,因为使用Iterator,当您尝试获取next()
或remove()
时,您知道可能会获得NoSuchElementException
,{ {1}}或UnsupportedOperationException
,您可以捕捉并处理其中任何一个,因为您正在同步执行此操作。
对于发布者,如果发生错误,则无法通知侦听器/订阅者,然后崩溃。 IllegalStateException
是最后一个缺失的部分,因此Observable可以正常处理任何错误。
总而言之,Reactive Java开始修复事件模型中缺少的部分很长一段时间。通过提供缺少的部分,并提供函数式编程风格(支持map,flatmap,filter等),它有助于以自然,可读的方式编写异步调用,减少编程风格必要时的必要代码(例如嵌套的-loops)并创建{{3}}。