在处理数据请求时,有时数据量有限,过多的请求只会返回空数据。在这种情况下,直接中断请求是一个更高效的做法。虽然 Vue 和 Axios 的结合使用非常流行,但关于原生 JavaScript 实现的资料相对较少。因此,我决定分享一个使用 Axios 的 CancelToken 来取消请求的原生方法。

在发送请求之前,我们可以通过请求拦截器来检查是否需要取消请求。以下是一个示例代码:

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    console.log("加载中");
    document.getElementById("loding").style.display = "block";
    if (!frag) {
      config.cancelToken = new CancelToken(function executor(c) {
        cancel = c;
      });
      cancel("没有数据了");
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

在接收到响应后,我们可以通过响应拦截器来判断是否还有数据。如果没有数据,我们可以设置一个标志位frag,以便在下一次请求时取消请求。

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    //console.log(response)
    if (response.data.message.length === 0){
        frag = false;
    }
    document.getElementById('loding').style.display = "none";
    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});

这样在数据加载完毕后能够有效地取消后续的请求,激活 frag,再到下次的请求拦截器中,直接取消拦截。

当数据刷完后,就会这样提示

Image

(´இ 皿 இ `)如果还有更多的方法,欢迎分享啊