javascript - 为什么我应该使用 HttpClient 而不是 fetch?

标签 javascript angular promise rxjs observable

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 请求 流,但我不明白为什么我想使用仅包含一个 HTTP 响应 的流。当你只有一个值时,这不就像使用数组一样吗?

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

最佳答案

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

如果您需要 Promise API(使用 async/await,这也非常有用),您始终可以使用 firstValueFrom(observeable)

所以对我来说,这只是表示同一事物的两种方式,每一种都有其相对于另一种的优势,但是由于 Observable 更通用,他们使用了它 - 你可以在 Observable 和 Promise 之间来回转换,但是 Observables 带来了一些特性Promise 没有。

关于javascript - 为什么我应该使用 HttpClient 而不是 fetch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47505072/

相关文章:

javascript - 如何在angularjs中单击按钮时显示复选框列表?

javascript - 验证 javascript 中的有效 html 标签

html - bootstrap 4 + angular 中的正文和内容 div 高度 100

javascript - Node 无错误退出且不等待 promise (事件回调)

javascript - jQuery: promise : 'always()' 未执行

javascript - 模态中的固定元素不会保持固定

javascript - 图像比较 slider 容器不会 flex 包裹

javascript - 在最近点击的元素下划线

angular - Bootstrap 后如何通过 APP_INITIALIZER 引用服务中设置的属性

javascript - 从 promise 中返回另一个 promise