在React中,使用Axios时AbortController信号对我不起作用。
我希望使用AbortController替换已弃用的CancelToken,但它无法正常工作,即请求未被取消。
let testController: AbortController;
function loadTest() {
testController = new AbortController();
TestAPI.getTest(testController.signal)
.then((e) => {
console.log(e.data);
})
.catch((e) => {
console.error(e);
});
}
在UseEffect清除函数中,我这样做(这里应该取消),并且信号的状态也被设置为aborted,但请求仍然没有被取消:
useEffect(() => () => {
if (testController) testController.abort();
// console.log(testController.signal.aborted) => **true**
}, []);
这是我的API,我将AbortSignal传递给请求:
getTest(signal?: AbortSignal): Promise<AxiosResponse<Test[]>> {
return axios.get(`${URI}/test`, { signal });
},
使用 Axios.CancelToken.source 时一切正常,但现在使用 AbortController 后,请求永远不会被取消。
正在使用的版本是:"axios": "^0.26.0"
是否有人成功地将 AbortController 与 React 和 Axios 集成?或者 AbortController只能与 fetch 一起使用?
useEffect
清理函数中引用。 - Drew Reeseabort
将无法取消正在进行的请求。这正是OP所描述的行为,他们的请求没有被取消。 - Drew Reese