Closed. This question is opinion-based。它当前不接受答案。












想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

2年前关闭。



Improve this question




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

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

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

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

  • 我的问题不是它们之间有什么区别,但是我们是否实际需要Observables,或者它们仅仅是语法糖?
    由于Promises的使用是为了同步(按顺序设置)异步流,因此通过告诉一个代码块仅在另一个代码块完成后才运行,才可以运行它。
  • 我们是否真的关心处理乘法事件,因为几乎总是我们想对某些流的成功或失败使用react(例如服务器请求)。
  • 用于处理Observable的RxJs方法(帮助函数)很酷,但并不真正相关,因为您可以针对该行为使用第三方库(例如,代替使用RxJs debounce,我可以将Lodash _.debounce与Promise一起使用)。当然,每个第3方库都具有额外的复杂性-RxJ也是如此。
  • 仅在订阅后才触发Observables-这并不是很重要-如果没有人在听(订阅)它们,为什么我们要有一个Observable呢?

  • 聚苯乙烯
    请不要阅读此问题,以为我有个人代理人可观察的东西,我只是想了解他们最 Shiny 的地方?在某些情况下,如果有的话,它们要比Promises优越?

    最佳答案

    我确实相信,除了询问之外,我们还需要可观察的东西吗? ,我们应该在什么时候需要obtable询问您会错过一些与众不同之处:

  • 可观察对象并不总是异步的,像Observable.just这样的运算符是完全同步的。
  • 有热的和冷的可观察对象,这意味着一些可观察对象只有在您订阅它们后才开始发出,HttpClient::get是其中之一。虽然 promise 很热心。

  • RXJS Observables旨在提供一种简单的方法来进行函数式响应式(Reactive)编程,而promises只是一种进行异步编程的方法。

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

    10-06 11:35