关于Promise和fetch的使用

Promise

一般来说promise是一个工厂函数,其调用的resolve,reject,all,race 这些方法称之为工厂方法。

通常我们构造一个函数我们用 new ,但是如果我们有特殊需求的时候,就会用到工厂模式,一个构造工厂.

fetch

fetch的优势

fetch是浏览器提供的,是浏览器支持的,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应,该方法提供了一种简单,合理的方式来跨网络异步获取资源。

fetch是一个让我们处理http pipeline更容易的工具,

http pipeline是什么
在HTTP1.1之前是一个请求发出去一个请求回来,才会继续下一个,时间浪费在服务端和客户端之间通信。
开启这个,就会请求发送和返回是自己顾自己的,请求一个一个发过去,一个一个回来,也就是说你只管发,然后接只管接,前提就是server有额外处理的能力。

fetch的返回是一个promise

  • resolve 发生在网络通信正常(404,500也是resolve)
  • reject 发生在网络通信异常

当只有在网络通信出现问题的时候才会放回reject,在其他情况下我们都是返回resolve,并且网络波动发生错误是我们不能直接干预的,一般情况网络波动的状态码会自己返回。

fetch发送请求,默认是不发送cookie的(需要手动进行设置)

fetch的使用

基本使用

fetch('www.dev.com')
  .then(response => response.json())
  .then(data => console.log(data));

fetch 的基本参数 

//url 请求的地址 init 对你请求发出的一些基本配置,初始化
fetch('url',init)

init就是内容里写 请求的方法,请求的请求头,和请求体的编写。

使用

fetch('www.dev.com',{
medth:'POST',
headers:{
 'Content-Type': 'application/json'
},
body:JSON.stringify(data) 
})
.then(resp=>resp.json())
.then(data => console.log(data))

headers里面的内容一般请求头上有的都可以使用。

注意:mode: "no-cors" 仅允许使用一组有限的 HTTP 请求头:

  • Accept
  • Accept-Language
  • Content-Language
  • Content-Type 允许使用的值为:application/x-www-form-urlencodedmultipart/form-data 或 text/plain

发送带有cookie的请求

fetch('www.dev.com',{
credentials: 'include'
})
.then(resp=>resp.json())
.then(data => console.log(data))

medth 不写就是代表GET请求 

fetch带来的便利

1.因为fetch是浏览器支持的,所以我们是可以直接在浏览器的控制台里使用,

来重新请求该失败的请求

 可以看到,这里其实是可以在控制台里直接发送,而且返回是一个promise,

其实这里请求一个报错的,

因为我是在百度下面请求百度,因为百度里面并没有百度这个url

请求'/'就是重新请求 当前网页。

2.因为fetch请求是一个公共的浏览器标准,都可以使用

不用去请求一个库在去用里面的请求方法,而是可以直接使用fetch请求。

应对不稳定的网络环境-指数补偿
按照指数的时间倍数重复发送请求
0ms
200ms
400ms
800ms
1600ms
3200ms
fail
如果我们在0ms发一个请求,200ms没回来,我们就会继续发,如果200ms发出,到400ms还没回来,那么就在发如果到800之前200ms的请求回来,那么就不发了,如果3200ms还没回来那就认为网络断开了

t 指数

resolved 是请求成功了

 

 如果大于16(3200ms)就认为网络断开,不做了

如果小

请求数据

 

 没有返回增加指数

小结 

从架构方面来讲,优化只是工程问题,
优化不是你一个页面的问题,而是所有页面的问题。
而是一类问题,提供工具

这样才能让你的项目更加优秀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值