gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:37:36 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


4年前关闭。







Improve this question




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

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

可观察的

  • 传递 0 到 N 个事件。每个事件都可以调用回调。
  • 一个 observable 是 可取消
  • 它们有很多不同的方法(由 RxJs 团队实现),可以帮助我读取和解析数据,例如:map , reduce , retry和更多。
  • 仅当有人订阅了 Observables block 时才会触发(否则不会发生任何事情)

  • promise
  • 处理 事件,它将调用成功回调或失败回调。
  • ES6 Promises 是不可取消的(至少现在是这样)。然而,不同的库已经实现了可取消的 promise ,例如BlueBird .
  • 无论是否有人订阅(使用 thencatch ),Promise block 都会被触发。

  • 我的问题不是它们之间有什么区别,而是我们真的需要 Observables,还是它们只是语法糖?
    由于 Promises 的用途是同步(按顺序设置)异步流程,因此通过告诉一个代码块仅在另一个代码块完成它的流程时运行。
  • 我们真的关心处理多重事件吗,因为几乎总是我们希望对某些流的成功或失败使用react(如服务器请求)。
  • 用于处理 Observables 的 RxJs 方法(辅助函数)很酷,但并不真正相关,因为您可以使用 3rd 方库来处理该行为(例如,不使用 RxJs debounce 我可以使用 Lodash _.debounce 和 Promise)。当然,每个 3rd 方库都带有额外的复杂性——但 RxJs 也是如此。
  • Observables 仅在订阅后才被触发——这不是那么重要——如果没有人在监听(订阅)它们,我们为什么要拥有一个 Observable。

  • 附言
    请不要阅读这个问题并认为我有一些个人代理 Observables,我只是想了解它们在哪里最 Shiny ?在哪些情况下它们比 Promises 更好,如果有的话?

    最佳答案

    我确实相信,而不是问 我们需要可观察的吗? 我们应该问我们什么时候需要可观察的? 您错过了一些作为差异的东西:

  • Observables 并不总是异步的,一些操作符像 Observable.just是完全同步的。
  • 有冷热可观察对象,这意味着某些可观察对象只有在您订阅它们后才开始发射,HttpClient::get是其中之一。而 promise 热切地评估。

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

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

    关于JavaScript - 我们应该使用 Observables 吗?还是 promise 就足够了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50512238/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com