axios 实现哀求重试

打印 上一主题 下一主题

主题 806|帖子 806|积分 2418


前景提要:
ts 简易封装 axios,统一 API
实如今 config 中配置开关拦截器
哀求重试的核心是可以重放哀求,具体实现就是在 axios 中,拿到当前哀求的 config 对象,再用 axios 实例,就能重放哀求。
在无感刷新 token 中,当 access token 逾期,使用 refresh token 刷新后,就需要再次对业务接口重放哀求。
上面是一种哀求重试的场景,一样平常情况下也不需要重试,以是我们这里讲的哀求重试,指的都是哀求网络错误的情况下需要重试。
比如断网了,然后重试。而不是由于接口返回 code 如 401 就重试。由于接口返回 401,从网络层面上讲,这是没有失败的,http 状态码是 200,返回 401 只是业务失败。
比起断网,更常见的网络错误下需要重试的是哀求超时。
通不对误拦截器实现哀求重试。整个哀求过程是一个递归。
第一次哀求失败,触发全局错误拦截,然后一起抛堕落误,触发到重试的错误拦截器。判定尚有重试次数后,拿到同一个实例重放哀求。留意此时第一次哀求并未结束,this.instance.request 方法依旧在等待效果。
如果哀求依旧失败,则触发第二次哀求的全局错误拦截,最后再次触发重试。如果第二次哀求重试乐成了,此时就拿到了哀求效果。而且为了让效果终极被第一次哀求捕获,需要在错误拦截器中抛出 fulfilled 状态的 promise 携带效果。
当哀求次数用完,则错误拦截器继续抛堕落误对象,触发第一次哀求的 request 方法的 catch 代码块。宣告整个哀求失败。
留意:


  • 肯定要以同一个 axios 实例重新发起哀求,由于本质是递归,换个一个实例就拿不到重试乐成后的哀求效果了。
  • 而且还需要在这个重试的错误拦截器中返回一个 fulfilled 状态的 promise,让第一次哀求的实例方法捕获。
   return Promise.resolve(res); 或 Promise.rejected(234); 都体现返回一个确定了状态的 promise,然后这个 promise 中携带了数据(就是参数)。
  1. import httpRequest
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表