Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我应该使用HttpClient over fetch?_Javascript_Angular_Promise_Rxjs_Observable - Fatal编程技术网

Javascript 为什么我应该使用HttpClient over fetch?

Javascript 为什么我应该使用HttpClient over fetch?,javascript,angular,promise,rxjs,observable,Javascript,Angular,Promise,Rxjs,Observable,Angular 2+引入了HttpClient,它发出一个HTTP请求,并将它们发送到一个RxJS可观察的服务器上。我的问题是,为什么我会选择使用标准来进行单个HTTP请求 我对RxJS很熟悉,我理解这个图表 |一|多 ------------------------------------- sync | T | Iterable 异步|承诺|可观察 Http请求是异步的,返回一个值。为什么这应该是一个可观察的结果?我知道我想将事件流组合成HTTP请求流,但我不明白为什么我只想使用一个HTT

Angular 2+引入了
HttpClient
,它发出一个HTTP请求,并将它们发送到一个RxJS可观察的服务器上。我的问题是,为什么我会选择使用标准来进行单个HTTP请求

我对RxJS很熟悉,我理解这个图表

|一|多
-------------------------------------
sync | T | Iterable
异步|承诺|可观察
Http请求是异步的,返回一个值。为什么这应该是一个可观察的结果?我知道我想将事件流组合成HTTP请求流,但我不明白为什么我只想使用一个HTTP响应流。这不就像使用数组时只有一个值吗


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

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

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


所以对我来说,这只是两种表达同一事物的方式,每一种都有它的优点,但由于可观察性更为普遍,他们使用的是-你可以从可观察性来回转换为承诺,但可观察性带来了Promises所没有的特性。

HttpClient还为单元测试提供了模拟工具。@b我认为您的答案与操作更相关。。。因为对于我的,你可以争论使用Rx.Observable-fetch版本(如果确实存在的话)。
       | one        | many
-------------------------------------
sync   |  T         | Iterable<T>
async  | Promise<T> | Observable<T>