JavaScript-我们应该使用Observables吗?还是承诺就足够了?

Gil*_*ain 5 javascript observable rxjs es6-promise angular

我很熟悉JavaScript的Promises。我知道今天的Promises是JavaScript语言的一部分-自ES6起,但是很久以前,那里(现在仍然是)一些实现它们的不同库。

我最近开始从事一些Angular项目,并向我介绍了Observables的概念(由RxJs提出)。
经过一番入侵之后,我了解了Observable和Promise之间的基本区别:

可观察的

  • 将0传递到N个事件。每个事件都可以调用回调。
  • 可观察的是可取消的
  • 他们有很多不同的方法(通过RxJs团队实施),可以帮助我阅读和分析类的数据:mapreduceretry等等。
  • 仅当有人订阅了Observables块时,才会触发它(否则将不会发生任何事情)

承诺

  • 处理单个事件,该事件将调用成功回调或失败回调。
  • ES6承诺不可取消(至少目前为止)。但是,不同的自由主义者已经实现了可撤销的承诺,例如BlueBird
  • 无论有人是否订阅(使用thencatch),都会触发Promises阻止。

我的问题不是它们之间有什么区别,但是我们是否实际需要Observables,或者它们仅仅是语法糖?由于Promises的使用是为了同步(按顺序设置)异步流,因此通过告诉一个代码块仅在另一个代码块完成时才运行,才可以运行它。

  1. 我们是否真的关心处理乘法事件,因为几乎总是我们想对某些流的成功或失败(例如服务器请求)作出反应。
  2. 用于处理Observable的RxJs方法(辅助函数)很酷,但并没有真正意义,因为您可以针对该行为使用第3方库(例如,debounce可以使用Lodash _.debounce和Promise 来代替RxJs )。当然,每个第3方库都具有附加的复杂性-RxJ也是如此。
  3. 只有在订阅后才触发可观察对象-这不是很重要-如果没人在听(订阅)它们,为什么我们要有一个可观察对象?

PS:
请不要阅读此问题,并认为我有个人代理人可观察的东西,我只是想了解他们在哪里最闪亮?在某些情况下,如果有的话,它们比“承诺”优越?

J. *_*rdo 3

我确实相信,我们不需要询问,而是需要可观察的东西?我们应该问什么时候需要 observables?您可能会忽略一些差异:

  1. 可观察对象并不总是异步的,一些运算符(例如)Observable.just是完全同步的。
  2. observables 有热和冷之分,这意味着有些 observables 仅在您订阅它们后才开始发射,这HttpClient::get是其中之一。虽然承诺热切评估。

RXJS Observables 旨在提供一种简单的方法来进行函数式反应式编程,而 Promise 只是一种进行异步编程的方法。

基于此,我可以说Observables 不仅仅是 Promise 的语法糖,而是一个完全不同的结构。