【问题标题】:axios cancelled requests can't be restartedaxios 取消的请求无法重启
【发布时间】:2019-04-27 17:45:37
【问题描述】:

当组件卸载时,我正在取消 axios 请求,如下所示

const CancelToken = axios.CancelToken
const source = CancelToken.source()

componentWillUnmount () {
 source.cancel('message')
}

当组件被卸载时,后台发生的网络请求被标记为“停止”。问题是当用户再次访问该组件时,应该在 componentDidMount 中发生的网络请求无法启动。

【问题讨论】:

  • 您是否将取消令牌传递给请求?
  • 是的。我在主 axios 请求中将 source.token 值作为参数传递。

标签: javascript reactjs axios


【解决方案1】:

axios#cancellation 描述了使用cancelToken 的两种方法。您使用了第一种方式,即 source.token/source.cancel。我是这样开始的,并且遇到了与您类似的问题:一旦取消了对特定 URL 的请求,我就再也无法从该 URL 获得成功的响应。我使用 executor 函数切换到第二种方法,问题就消失了。我猜是为多个请求共享相同的 cancelToken,这就是他们所说的你可以使用 executor 函数方法来做的事情。无论如何,也许这对你也有用。

【讨论】:

  • 是的,你是对的。 cancelToken 在每个请求中都应该是新的。使用 const source = CancelToken.source(); 生成新的 source.token ,问题就消失了。?
【解决方案2】:

取消后设置一个新令牌。

let uploadCancelTokenSource = axios.CancelToken.source();

upload() {
    const config = {
        cancelToken: uploadCancelTokenSource.token,
    };  
}

cancel() {
    uploadCancelTokenSource.cancel('Operation canceled by the user');
    uploadCancelTokenSource = axios.CancelToken.source();
}

【讨论】:

    猜你喜欢
    • 2017-12-04
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    相关资源
    最近更新 更多