实现 axios 取消 timeout
概述
在使用 axios 进行网络请求时,有时候需要设置一个超时时间,如果请求在超时时间内未完成,则取消请求。本文将教你如何在 axios 中实现取消 timeout 功能。
流程图
journey
title 实现 axios 取消 timeout
section 发起请求
Note over you: 创建 axios 实例
Note over you: 设置超时时间为 5000ms
you ->> axios: 发起请求
Note over axios: 请求发送中...
section 请求超时
axios -->> you: 请求超时
you -->> axios: 取消请求
Note over axios: 请求已取消
section 请求完成
axios -->> you: 响应数据
步骤
下面是实现 axios 取消 timeout 的步骤:
步骤 | 描述 |
---|---|
1 | 创建 axios 实例 |
2 | 设置超时时间 |
3 | 发起请求 |
4 | 监听请求超时事件 |
5 | 取消请求 |
代码示例
1. 创建 axios 实例
首先,我们需要创建一个 axios 实例,用于发起网络请求。
import axios from 'axios';
const instance = axios.create();
2. 设置超时时间
接下来,我们需要设置超时时间。在 axios 实例上,可以通过 timeout
属性设置超时时间,单位为毫秒。
instance.defaults.timeout = 5000;
3. 发起请求
现在,我们可以使用 axios 实例来发起请求了。可以使用 get
、post
等方法来发送请求。
instance.get('/api/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
4. 监听请求超时事件
为了捕捉请求超时事件,我们可以通过 timeout
配置的方式来监听超时事件。
instance.defaults.timeout = 5000;
instance.interceptors.request.use(config => {
const { timeout, cancelToken } = config;
if (timeout) {
// 创建一个 CancelToken
const source = axios.CancelToken.source();
// 设置 cancelToken
config.cancelToken = source.token;
// 监听请求超时事件
setTimeout(() => {
source.cancel('请求超时');
}, timeout);
}
return config;
}, error => {
return Promise.reject(error);
});
上述代码中,我们在 interceptors.request
中使用了一个拦截器,用于监听请求的超时时间。
在拦截器中,我们获取了请求的配置信息,包括超时时间和取消令牌。然后,我们创建了一个 CancelToken,并将其设置为配置中的 cancelToken。接着,我们通过 setTimeout
来监听请求超时事件,并在超时后取消请求。
5. 取消请求
如果请求超时,我们需要手动取消请求。在之前的代码中,我们已经设置了取消令牌,现在我们只需要在请求超时的回调函数中调用 cancel
方法即可。
setTimeout(() => {
source.cancel('请求超时');
}, timeout);
以上就是实现 axios 取消 timeout 的完整代码示例。
总结
通过以上步骤,我们可以轻松实现 axios 取消 timeout 功能。首先,我们创建了一个 axios 实例,并设置了超时时间。然后,我们发起了一个请求,并在拦截器中监听请求超时事件。最后,我们通过取消令牌和取消请求的回调函数来手动取消请求。
希望本文对你理解如何实现 axios 取消 timeout 有所帮助!