【问题标题】:Why should I use HttpClient over fetch?为什么我应该使用 HttpClient 而不是 fetch?
【发布时间】:2018-05-10 08:17:55
【问题描述】:

Angular 2+ 引入了HttpClient,它发出一个 HTTP 请求并将它们发送到一个 RxJS observable。我的问题是为什么我会选择使用 HttpClient's API 而不是标准的 fetch 来发出单个 HTTP 请求?

我对RxJS很熟悉,看懂了"the four fundamental effects"这个图表。

       | one        | many
-------------------------------------
sync   |  T         | Iterable<T>
async  | Promise<T> | Observable<T>

Http 请求是异步的并返回一个值。为什么那应该是一个 Observable?我知道想要将事件流组合成 HTTP requests 流,但我不明白为什么我想只使用一个 HTTP 响应 流。这不就像只有一个值时使用数组一样吗?

我错过了什么吗?一般来说,我为什么要使用 Angular 的 HttpClient? fetch 的不足之处在哪里?

【问题讨论】:

标签: javascript angular promise rxjs observable


【解决方案1】:

这只是一个不同的 API。 Observables 有一种更好的方法来区分“事物如何流动”(所有运算符:map、merge、concat 等)与执行(.subscribe),这通常有助于获得更好的画面。 Plus 提供了在请求失败时取消或重试请求的有用方法。

如果您需要 Promise API(使用 async/await,这也非常有用),您可以随时使用 Observable.toPromise()

所以对我来说,这只是表示同一事物的两种方式,每种方式都有其优势,但由于 Observable 更通用,因此他们使用它 - 您可以从 Observable 来回转换为 Promise,但 Observables 带来了功能Promises 没有。

【讨论】:

  • HttpClient 还为单元测试提供了模拟工具。
  • @bnieland 我认为您的回答与 OP 更相关......因为我的回答可能会争论使用 fetch 的 Rx.Observable 版本(如果确实存在的话)。
猜你喜欢
  • 2014-11-02
  • 2016-05-23
  • 2014-03-12
  • 2012-12-13
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多