实现 axios 取消 timeout

概述

在使用 axios 进行网络请求时,有时候需要设置一个超时时间,如果请求在超时时间内未完成,则取消请求。本文将教你如何在 axios 中实现取消 timeout 功能。

流程图

journey
    title 实现 axios 取消 timeout
    section 发起请求
        Note over you: 创建 axios 实例
        Note over you: 设置超时时间为 5000ms
        you ->> axios: 发起请求
        Note over axios: 请求发送中...
    section 请求超时
        axios -->> you: 请求超时
        you -->> axios: 取消请求
        Note over axios: 请求已取消
    section 请求完成
        axios -->> you: 响应数据

步骤

下面是实现 axios 取消 timeout 的步骤:

步骤 描述
1 创建 axios 实例
2 设置超时时间
3 发起请求
4 监听请求超时事件
5 取消请求

代码示例

1. 创建 axios 实例

首先,我们需要创建一个 axios 实例,用于发起网络请求。

import axios from 'axios';

const instance = axios.create();

2. 设置超时时间

接下来,我们需要设置超时时间。在 axios 实例上,可以通过 timeout 属性设置超时时间,单位为毫秒。

instance.defaults.timeout = 5000;

3. 发起请求

现在,我们可以使用 axios 实例来发起请求了。可以使用 getpost 等方法来发送请求。

instance.get('/api/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

4. 监听请求超时事件

为了捕捉请求超时事件,我们可以通过 timeout 配置的方式来监听超时事件。

instance.defaults.timeout = 5000;

instance.interceptors.request.use(config => {
  const { timeout, cancelToken } = config;

  if (timeout) {
    // 创建一个 CancelToken
    const source = axios.CancelToken.source();
    // 设置 cancelToken
    config.cancelToken = source.token;

    // 监听请求超时事件
    setTimeout(() => {
      source.cancel('请求超时');
    }, timeout);
  }

  return config;
}, error => {
  return Promise.reject(error);
});

上述代码中,我们在 interceptors.request 中使用了一个拦截器,用于监听请求的超时时间。

在拦截器中,我们获取了请求的配置信息,包括超时时间和取消令牌。然后,我们创建了一个 CancelToken,并将其设置为配置中的 cancelToken。接着,我们通过 setTimeout 来监听请求超时事件,并在超时后取消请求。

5. 取消请求

如果请求超时,我们需要手动取消请求。在之前的代码中,我们已经设置了取消令牌,现在我们只需要在请求超时的回调函数中调用 cancel 方法即可。

setTimeout(() => {
  source.cancel('请求超时');
}, timeout);

以上就是实现 axios 取消 timeout 的完整代码示例。

总结

通过以上步骤,我们可以轻松实现 axios 取消 timeout 功能。首先,我们创建了一个 axios 实例,并设置了超时时间。然后,我们发起了一个请求,并在拦截器中监听请求超时事件。最后,我们通过取消令牌和取消请求的回调函数来手动取消请求。

希望本文对你理解如何实现 axios 取消 timeout 有所帮助!