解决AbortController中断请求无法再次请求

axios新方式中断请求

文档:GitHub - axios/axios: Promise based HTTP client for the browser and node.js

 官网的示例

const controller = new AbortController();

axios.get('/foo/bar', {
   signal: controller.signal
}).then(function(response) {
   //...
});
// cancel the request
controller.abort()

 如果按照这种方法后,再次点请求就无法发送了,因为signal里面的属性aborted是只读属性,改不了,你点击发送请求,他会读取signal的aborted值为true,就不发送了,咋办?看下去

我看了一下api,文档:AbortSignal - Web API 接口参考 | MDN,AbortController - Web API 接口参考 | MDN

这家伙是个只读属性,咋办?方法总是有的,把控制器定在外面为空,用的时候再设置

let controller = null//在外面定一个控制器,设置为空   
    document.getElementById('one').onclick = async () => {
      try {
        // 如果控制器存在,说明有上个请求,就它取消并设置为空
        if (controller) {
          controller.abort()
          controller = null
        }
        //没有的话就到这一步
        controller = new AbortController()
        let res = await request({
          url: "/posts",
          signal: controller.signal
        })
        console.log(res);

      } catch (error) {
        console.log(error);
      }

    }
    document.getElementById('two').onclick = () => {

      if (controller) {
        controller.abort()
        controller = null
      } else {
        console.log('请求为空,无法请求');

      }
    }

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值