当前位置: 首页 > 知识库问答 >
问题:

javascript - 我的这段不会取消请求,请问是什么问题? axios怎么取消请求?

贾飞鸿
2023-12-26

这是我的axios依赖:

"axios": "^1.4.0",

这是我的代码

const source = axios.CancelToken.source();data = {    ...data,    ...JSON.parse(localStorage.getItem('_TT_token')),    cancelToken: source.token}const xhr = axios.post(url,data)// 如果xhrMap中存在该url请求,则执行取消操作if (xhrMap[url]) {    source.cancel('Operation canceled by the user.')}xhrMap[url] = xhrxhr.then(    (response) => {        resolve(response.data);    },    (err) => {        if (axios.isCancel(err)) {            console.log('Request canceled:', err.message);        } else {              reject(err);          }    });

这段代码有什么问题么?请求并不会取消

共有3个答案

温凯
2023-12-26

你应该先判断 xhrMap 里是否有缓存数据,然后再调用 axios.post 发起请求;而不是发起请求之后再取消。

甄成弘
2023-12-26
data = {    ...data,    ...JSON.parse(localStorage.getItem('_TT_token')),    cancelToken: source.token}axios.post(url,data)

应为

axios.post(url, data, {    cancelToken: source.token})
仲孙毅
2023-12-26

看起来,你在使用 axiosCancelToken 来取消请求。但是在你的代码中,CancelToken 被正确地创建了,但是并没有正确地传递给请求。你创建了 source.token 并添加到了数据对象中,但是并没有将它传递给 axios.post 请求。

你应该将 cancelToken 作为第三个参数传递给 axios.post,就像这样:

const source = axios.CancelToken.source();data = {    ...data,    ...JSON.parse(localStorage.getItem('_TT_token')),    cancelToken: source.token}const xhr = axios.post(url, data, {cancelToken: source.token});// 如果xhrMap中存在该url请求,则执行取消操作if (xhrMap[url]) {    source.cancel('Operation canceled by the user.');}xhrMap[url] = xhrxhr.then(    (response) => {        resolve(response.data);    },    (err) => {        if (axios.isCancel(err)) {            console.log('Request canceled:', err.message);        } else {              reject(err);          }    });

在这段代码中,我们传递了一个配置对象作为第三个参数给 axios.post。这个配置对象包含一个 cancelToken 属性,其值就是我们之前从 CancelToken.source().token 获取的 token。这样,我们就可以使用这个 token 来取消请求了。

 类似资料:
  • 我试图用PUT请求调用REST API,但收到400个错误代码(错误请求)。有人能看出我做错了什么吗? 我已经用REST客户端成功调用了这个API,下面是使用的头和主体: https://imgur.com/dZVyawnhttps://imgur.com/lMtn2JB 错误400收到错误请求响应

  • 有没有大佬提供下这种echart 图表的示例参考一下

  • 问题内容: 在我的应用中,我正在创建从HTTP到HTTPS的AJAX请求。这意味着我需要CORS。因此,我向jQuery.ajax添加了一些标题和参数并对其进行了测试。在Firefox中,一切正常,但在Chrome中,一切正常。Chrome会“杀死”每一个预先提出的请求(选项)。 jQuery脚本: HTTP转储: 有人知道为什么Chrome会终止此请求吗? 问题答案: 也许您的https服务器具

  • 问题内容: 我的网站提出了很多要求。我经常需要取消所有当前请求,以使浏览器不会阻止相关的新请求。 我有3种要求: 阿贾克斯 插入的脚本标签(执行JSONP通讯) 插入的图像标签(导致浏览器向各种服务器请求数据) 对于Ajax,它没有问题,因为XMLHttpRequest对象支持取消。我需要的是一种使所有浏览器停止从DOM对象加载资源的方法。 看起来简单地从DOM中删除对象(例如,图像标签)只会帮助

  • 在鸿蒙OS的arkts的axios中, 怎么取消某个http请求? 本文参与了 思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。