用promise和xhr封装axios
时间: 2024-08-12 13:09:44 浏览: 89
在JavaScript中,Axios是一个流行的HTTP客户端库,用于在浏览器和Node.js环境中进行API交互。它支持Promise API,这使得异步请求的处理更加直观和可读。如果你想用Promise和XMLHttpRequest(XHR)的方式来封装Axios,你可以这样做:
1. **创建Promise基础版本**:
```javascript
function makeRequest(method, url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.onload = function () {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(xhr.response);
} else {
reject(new Error(xhr.statusText));
}
};
xhr.onerror = function () {
reject(new Error('Network request failed'));
};
xhr.send();
});
}
```
2. **封装Axios**:
```javascript
function axiosPromiseWrapper(method, url, data, config) {
return makeRequest(method, url).then(response => {
// Axios处理响应
return axios.create({
baseURL: url,
method: method,
...config,
transformRequest: [data], // 如果有数据转换需求
transformResponse: [response => response],
}).request({ data, method });
}).catch(error => {
// 处理错误
return axios.create({
baseURL: url,
method: 'GET', // 如果网络请求失败,重试通常使用GET
...config,
}).request({ params: error.response.data, method });
});
}
```
阅读全文