加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Axios适配器实现请求重试的处理办法

发布时间:2021-05-28 15:11:34 所属栏目:教程 来源:互联网
导读:Axios 引入了适配器,使得它可以同时支持浏览器和 Node.js 环境。对于浏览器环境来说,它通过封装 XMLHttpRequest API 来发送 HTTP 请求,而对于 Node.js 环境来说,它通过封装 Node.js 内置的 http 和 https 模块来发送 HTTP 请求。 在 Axios 如何缓存请

Axios 引入了适配器,使得它可以同时支持浏览器和 Node.js 环境。对于浏览器环境来说,它通过封装 XMLHttpRequest API 来发送 HTTP 请求,而对于 Node.js 环境来说,它通过封装 Node.js 内置的 http 和 https 模块来发送 HTTP 请求。

在 Axios 如何缓存请求数据? 这篇文章中,阿宝哥介绍了如何通过增强默认的 Axios 适配器,来实现缓存请求数据的功能。同样,采用类似的思路,我们也可以通过增强默认的 Axios 适配器来实现请求重试的功能。

在介绍如何增强默认适配器之前,我们先来看一下 Axios 内置的 xhrAdapter 适配器,它被定义在 lib/adapters/xhr.js 文件中:

// lib/adapters/xhr.js 

module.exports = function xhrAdapter(config) { 

  return new Promise(function dispatchXhrRequest(resolve, reject) { 

    var requestData = config.data; 

    var requestHeaders = config.headers; 

 

    var request = new XMLHttpRequest(); 

    // 省略大部分代码 

    var fullPath = buildFullPath(config.baseURL, config.url); 

    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); 

    // Set the request timeout in MS 

    request.timeout = config.timeout; 

 

    // Listen for ready state 

    request.onreadystatechange = function handleLoad() { ... } 

 

    // Send the request 

    request.send(requestData); 

  }); 

}; 

很明显 xhrAdapter 适配器是一个函数对象,它接收一个 config 参数并返回一个 Promise 对象。而在 xhrAdapter 适配器内部,最终会使用 XMLHttpRequest API 来发送 HTTP 请求。为了实现请求重试的功能,我们就可以考虑通过高阶函数来增强 xhrAdapter适配器的功能。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读