javascript 中实现请求取消的重试机制,核心在于利用 abortcontroller 实例化一个信号对象,并将其传递给 fetch 或 xmlhttprequest。当需要重试时,调用该控制器的 abort() 方法中断当前请求,随后在捕获到因中止引发的异常后,重新发起新的请求并绑定一个新的控制器实例。

如何在中途主动中断正在进行的网络请求
通过创建 AbortController 对象并获取其 signal 属性,可以在发起请求时将其作为配置项传入。一旦调用控制器的 abort() 方法,浏览器会立即终止该请求,并在 Promise 链中抛出一个名为 AbortError 的 DOMException 对象。

const controller = new AbortController();
const signal = controller.signal;
// 发起请求
fetch('https://api.example.com/data', { signal })
.then(response => response.json())
.catch(error => {
if (error.name === 'AbortError') {
console.log('请求已被手动取消');
} else {
console.error('其他错误:', error);
}
});
// 随时可以触发取消
controller.abort();
上述代码展示了最基础的取消流程。关键在于 signal 对象的传递,它建立了请求与控制器之间的关联。当 abort() 被调用时,关联的请求状态会变为中止,从而阻止后续的数据处理逻辑执行。
如何在捕获取消异常后自动重新发起请求
要实现重试,需要在 catch 块中判断错误类型是否为 AbortError。如果是,则说明是预期的取消操作,此时可以再次调用 fetch 发起新请求。为了避免无限重试,通常需要引入计数器或最大重试次数限制。

AbortController
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











