【问题标题】:Why does Angular httpClient returns an Observable instead of a Promise? [closed]为什么 Angular httpClient 返回的是 Observable 而不是 Promise? [关闭]
【发布时间】:2022-04-15 20:21:41
【问题描述】:

我做了一个返回 Flux 对象的 spring 响应式后端。当我使用 angular httpClient 调用服务并订阅返回的 observable 时。结果永远不会被触发。那么,如果只有一个响应是可能的,为什么返回 Observable 而不是 Promise 呢?我已经对硬编码的 nodeJS SSE 服务进行了同样的尝试。我有相同的结果,但它适用于事件源。我的问题可能很奇怪,但 Observable 不是偶然选择的,所以我的理解肯定是错误的,我想理解。

【问题讨论】:

  • Observables 在单个响应中工作得非常好。为什么不应该呢?
  • 发出单个值并完成的 observable 并不比 promise 复杂。
  • 您也不必取消订阅已完成的 observable。
  • @WoutervanKoppen 如果组件也被销毁,Promises 将继续运行,因此就这个问题而言,这仍然没有有意义的不同。如果有什么是支持可观察的另一点,因为他们有更多的选择来处理这样的情况。
  • 我同意它应该是 Promise,因为该类型静态保证单个值。 Promise 非常简单。您可以使用defer 轻松“升级”到 Observable。 Observable 的优点并不总是适用,那么为什么要强制增加复杂性呢?现在,toPromise 已被弃用,情况更加不幸。

标签: angular rxjs observable angular7


【解决方案1】:

在发出 HTTP 请求时,与 Promise 相比,Observable 有几个优点:

  • 重试失败的请求(retry、retryWhen)
  • 取消不必要/过时的请求(switchMap、unsubscribe...)
  • 更好的错误处理
  • 轻松组合多个 HTTP 调用,并控制如何执行它们(例如,一个接一个或并行)。

【讨论】:

    【解决方案2】:

    Angular httpclient 总是会返回一个 observable (RXjs) ,promise 在 Angular 中不可用,它在 AngularJs 中可用,你需要订阅 observable

    更多信息请阅读documentation 阅读更多有关 Observables 的信息,请查看 this,如果您是 Rxjs 新手,请查看 this

    【讨论】:

    • 我知道。但是如果 Observable 只能触发一次,为什么还要使用 Observable 呢?
    • @Pred05 我建议您阅读 rxjs 可观察模式的实际工作原理。学习曲线可能有点陡峭,但值得:)
    • 它适用于 SSE 吗?
    • @Pred05 订阅 observable 就像订阅杂志一样,它会继续寻找变化,promise 总是返回拒绝的成功,订阅 observable 意味着继续寻找对 observable 的变化有意义吗?也编辑了我的帖子
    • “promise 在新的 Angular 版本中已被弃用”——这没有意义。 Angular 不提供 Promise。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2017-12-21
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多