当组件卸载时,我正在取消axios请求
const CancelToken = axios.CancelToken
const source = CancelToken.source()
componentWillUnmount () {
source.cancel('message')
}
卸载组件时,在后台发生的网络请求被标记为“已停止”。问题是当用户再次访问该组件时,应该在componentDidMount中发生的网络请求无法启动。
答案 0 :(得分:4)
axios#cancellation描述了使用cancelToken的两种方法。您使用了第一种方法,即source.token / source.cancel。我以这种方式开始,并遇到了与您类似的问题:取消对特定URL的请求后,再也无法从该URL获得成功的响应。我使用执行程序函数切换到第二种方法,问题消失了。我想是为多个请求共享相同的cancelToken,这就是他们说可以使用executor函数方法执行的操作。无论如何,也许这也对您有用。
答案 1 :(得分:0)
取消后设置新令牌。
let uploadCancelTokenSource = axios.CancelToken.source();
upload() {
const config = {
cancelToken: uploadCancelTokenSource.token,
};
}
cancel() {
uploadCancelTokenSource.cancel('Operation canceled by the user');
uploadCancelTokenSource = axios.CancelToken.source();
}