首页 文章

JavaScript - 我们应该使用Observables吗?还是承诺就够了? [关闭]

提问于
浏览
4

我'm long familear with JavaScript'的承诺 . 我知道今天Promises是JavaScript语言的一部分 - 从ES6开始,但很久以前他们就已经(现在仍然)有一些不同的库来实现它们 .

我最近开始研究几个Angular项目,并且我被介绍了Observables的概念(RxJs) .
在一些invanesgations之后,我理解了Observables和Promises之间的基本区别:

Observables

  • 将0传递给N个事件 . 每个事件都可以调用回调 .

  • 一个可观察的是 Cancelable

  • 它们有很多不同的方法(由RxJs团队实现),可以帮助我读取和解析数据,如: map ,_ 87798retry 等 .
    只有当某人订阅了它们时才会触发

  • Observables块(否则不会发生任何事情)

承诺

  • 处理 single 事件,该事件将调用成功回调或失败回调 .

  • ES6承诺不可取消(至少目前为止) . 然而,不同的libreries已经实现了可取消的承诺,例如BlueBird .

  • 无论是否有人订阅(使用 thencatch ),都会触发Promises块 .

我的问题不是它们之间有什么区别,但我们是否真的需要Observables,还是只是语法糖?由于Promises的使用是同步(按顺序设置)异步流,通过告诉一个代码块仅在其他代码块完成它的流程时运行 .

  • 我们真的关心处理乘法事件,因为几乎总是我们想要对成功或某些流程的失败(如服务器请求)做出反应 .

  • 用于处理Observable的RxJs方法(辅助函数)很酷,但并不真正相关,因为您可以使用第三方库来实现该行为(例如,而不是使用RxJs debounce 我可以使用带有Promise的Lodash _.debounce ) . 当然,每个第三方库都带有额外的复杂性 - 但RxJ也是如此 .

  • Observables只在订阅后被触发 - 这不是那么重要 - 如果没有人正在监听(订阅)它们,我们为什么要拥有一个Observable .

P.S
请不要阅读这个问题,并认为我有一些个人代理Observables,我只是想了解他们最闪亮的地方?在哪些情况下,他们优于承诺,如果有的话?

1 回答

  • 2

    我确实相信我们不应该问 do we need observables? 我们应该问 when do we need observables? 有些事情你错过了差异:

    • Observable并不总是异步的,某些运算符如 Observable.just 是完全同步的 .

    • 有热和冷的可观察量,这意味着一些可观察物只在你订阅它们后才开始发射, HttpClient::get 就是其中之一 . 虽然承诺急切地评估 .

    RXJS Observables旨在提供一种简单的方法来进行功能性反应式编程,而promise只是一种进行异步编程的方法 .

    基于此我可以说 Observables are not just syntactical sugar for promises ,而是一个完全不同的结构 .

相关问题