JavaScript进阶(六十):fetch 的基本用法

前面几篇博客,我们说了 xhr 和 http,那么接下来,我们就要在看一个东西。

一般我们去请求服务器的话,并不是只有最原本的 xhr 对象能够帮我们,还有一个东西叫做 fetch。

 

首先,我们前面也对 fetch 有一个基本的认识。

第一,这东西挺好用的,那么好用在哪呢?好用在于方便,很多功能,它能够帮你很简单的实现。

第二,它的兼容性非常的差,差到什么程度呢?差到整个 IE 全都不认,IE11 都没用,它都不认。

所以我们在用的时候一定要小心一些,当然,如果你是移动端,那没问题。

 

那么接下来,我们就来看看,这个东西怎么用。

首先,我们所有的异步操作,一般还是喜欢去走 async / await。

所以在这,我们就直接来一个 async 了,fetch 天然就是一个 Promise。

JavaScript进阶(六十):fetch 的基本用法_第1张图片

然后,我们想要的是 data 下的 1.json:

JavaScript进阶(六十):fetch 的基本用法_第2张图片

注意,这时候我们就得到了这个 res,能用吗?

我们可以来打印出来看看,你会发现这个 fetch 其实也并不是那么的好用:

JavaScript进阶(六十):fetch 的基本用法_第3张图片

那么这时候你可以看到,它给我们打出来的这个 res,并不是真正的结果。

它是一个 Response 对象。

 

有人可能会觉得奇怪,它为什么不直接给我结果呢?

不着急,我们还需要经过另一步,就是我需要告诉它,我要什么东西。

比如我要 json,那这时候它才能给你东西:

JavaScript进阶(六十):fetch 的基本用法_第4张图片

但是你会发现照样不行。

注意,这时候我们还得再加个 await,如果你不加也是不行的:

JavaScript进阶(六十):fetch 的基本用法_第5张图片

那么现在这时候你就能看到,数据出来了。

 

然后我们先来说几个问题。

第一个问题,也是我当初刚接触到 fetch 的时候,我也挺奇怪的,为什么不一步搞了,非得分成两步?

简单来说,这事是这样的,当第一步完成的时候,其实它已经接收完数据了。

JavaScript进阶(六十):fetch 的基本用法_第6张图片

那这时候可能会奇怪说,那底下在干什么?

其实这时候它接收完的,是头的数据:

JavaScript进阶(六十):fetch 的基本用法_第7张图片

而底下这块 res.json(),这时候,它才开始去接收 body 的数据:

JavaScript进阶(六十):fetch 的基本用法_第8张图片

那为什么要分开呢?其实它是为了给你提供一个比较灵活的处理方案。

但是说实话,这样会不太好用。

 

然后另一个问题是,接收 body 为什么还需要 await 呢?

很简单,因为接收 body,也是需要时间的,所以它又需要一个await。

所以这个就导致了 fetch 用起来,其实不是特别多方便。

 

那么接下来,我们就已经对 fetch 有了一定的了解。

首先,它需要经过 2 个 await。

当然,我们也顺便的说下,万一我们项目中不用 async / await,也是可以的,只不过稍微有一点麻烦而已。

那么这时候我得用 then:

JavaScript进阶(六十):fetch 的基本用法_第9张图片

因为 async / await 也是基于 Promise 的。

然后我就会得到一个 res 对象,这个 res 跟刚才是一样的,也是一个 Response:

JavaScript进阶(六十):fetch 的基本用法_第10张图片

接下来我做什么呢?

我们就可以直接的让这个 res 去解析成为 json:

JavaScript进阶(六十):fetch 的基本用法_第11张图片

之后,我们就可以坐等它把数据给我们拿回来:

JavaScript进阶(六十):fetch 的基本用法_第12张图片

然后这时候你可以看到,出来也是一样的。

所以你用 async / await 可以,用 then 也是没问题的。

 

然后,你还可以这样来,把 async / await 的两步合成一步:

JavaScript进阶(六十):fetch 的基本用法_第13张图片

那么如果我们这么写的话,你可以看到报错了。

原因很简单,因为 fetch('data/1.json') 它出来以后,并不是真正的结果,它还需要 await 之后,才能出来东西。

所以,我们就需要拿括号给它括起来:

JavaScript进阶(六十):fetch 的基本用法_第14张图片

然后这时候你可以看到,这个 res,它还是一个 Promise。

那这时候怎么办呢?你就需要再来一个 await,它才能出来:

JavaScript进阶(六十):fetch 的基本用法_第15张图片

当然这个就有点恶心了。

所以如果你需要的话,你可以把它们两个给整合起来:

JavaScript进阶(六十):fetch 的基本用法_第16张图片

然后我再去 await 一下:

JavaScript进阶(六十):fetch 的基本用法_第17张图片

可以看到,这样也能出来,这个就看大家自己的一个需求。

所以到这为止,我们就算对 fetch 有了最基本的了解。

 

你可能感兴趣的:(JavaScript进阶,javascript)