我正在尝试遵循Axios文档来取消对URL的重复请求,但是当我没有收到任何错误时,请求并未被取消。通过以下方法,我仍然可以完成我想做的事情。
import axios from 'axios'
getData({commit,state,dispatch}, id){
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios
.get("http://15.100.100.100:9999/getData/" + id,{
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
console.log("cancel error")
}
})
},
我遵循了https://github.com/axios/axios#cancellation
处的Axios文档编辑:Kaushik Makwana的回答是正确的,但就我而言,由于axios调用是在store.js文件中进行的,因此我将其保存为状态而不是保存在常规变量中。
答案 0 :(得分:1)
您可以设置一个全局变量来存储过去的请求。
var source;
getData({commit,state,dispatch}, id){
if(source){
source.cancel();
}
const CancelToken = axios.CancelToken;
source = CancelToken.source();
axios
.get("http://15.100.100.100:9999/getData/" + id,{
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
console.log("cancel error")
}
})
},
答案 1 :(得分:0)
在componentDidMount生命周期挂钩内部使用:
useEffect(() => {
const ourRequest = Axios.CancelToken.source() // <-- 1st step
const fetchPost = async () => {
try {
const response = await Axios.get(`endpointURL`, {
cancelToken: ourRequest.token, // <-- 2nd step
})
console.log(response.data)
} catch (err) {
console.log('There was a problem or request was cancelled.')
}
}
fetchPost()
return () => {
ourRequest.cancel() // <-- 3rd step
}
}, [])
注意:对于POST请求,请将cancelToken作为第三个参数传递
Axios.post(`endpointURL`, {data}, {
cancelToken: ourRequest.token, // 2nd step
})