axios 如何用拦截器,只保留某个接口最新的一次请求

发布于 2022-09-07 15:36:14 字数 741 浏览 15 评论 0

有这个一个使用场景,一个筛选页面,用户可以快速点击筛选条件,筛选条件一变,马上请求数据api,但是接口远在国外,可以理解为请求非常耗时,所以这个接口,经常会同时会有好几个请求在处理,然后页面数据会闪。

所以我想,对于同一个url,所有请求只留最新,旧的请求无论是成功还是padding状态,都放弃,网上查好多文章都只是说取消重复请求问题,跟我想要的有点区别,加上对前端不熟悉(本菜是后台,首次写前端项目),想好久未能想明白,故此劳烦各位大佬,为小弟指点一二,不胜感激!

现在已有拦截器如下(已删除无关代码)

import axios from 'axios'
const service = axios.create({
    baseURL: 'a.com',
})
service.interceptors.request.use(config => {
    return config
}, error => {
    console.log(error)
    Promise.reject(error)
})
service.interceptors.response.use(
    response => response,
    error => {
        console.log('err' + error)
        return Promise.reject(error)
    })

export default service

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何以笙箫默 2022-09-14 15:36:14

你还需要axios的中断请求, cancelToken。

进入页面后先执行:

this.source = this.$axios.CancelToken.source();

每个axios请求都记得带上参数:

cancelToken: this.source.token

离开页面或者按你目前的需求,每次发请求都中断旧的请求:

this.source.cancel('Operation canceled by the user.');

参考:请搜索Cancellation

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文