在实际工作中,取消请求的场景通常出现在以下几种情况中:
- 用户导航离开页面:如果用户在请求数据的过程中快速切换到另一个页面,可以通过取消未完成的请求来优化性能。
- 输入框的搜索提示:当用户在输入框中输入内容时,可以结合防抖的方式取消之前的请求,从而只保留最新的请求,避免发送过多的请求。
取消请求的实现方式
Axios 提供了 CancelToken 的功能来实现请求的取消。以下是具体的代码示例:
import axios from 'axios';
// 创建一个取消源
const CancelToken = axios.CancelToken;
let cancel;
// 发送请求时可以传入 cancel token
axios.get('/api/data', {
cancelToken: new CancelToken(function executor(c) {
// 这里可以保存对 cancel 的引用
cancel = c;
})
}).then(response => {
console.log(response.data);
}).catch(error => {
if (axios.isCancel(error)) {
console.log('请求已被取消', error.message);
} else {
// 处理其他错误
console.error('请求出错', error);
}
});
// 需要取消请求时调用 cancel
cancel('请求被用户取消');
注意:
- 仅在需要取消请求的情况下调用 cancel 函数。
- 取消请求的异常会被 catch 捕获,通过 axios.isCancel 来判断是否是取消的原因。
- 记得根据实际需求合理使用取消请求的功能,以避免不必要的请求和资源浪费