axios取消请求源码

2 篇文章 0 订阅
2 篇文章 0 订阅
function CancelToken(executor) {
  if (typeof executor !== 'function') {
    throw new TypeError('executor must be a function.');
  }

  var resolvePromise;
  //将promise放在CancelToken的实例上(也就是可以通过 config.cancelToken.promise访问到这个promise的实例)
  this.promise = new Promise(function promiseExecutor(resolve) {
  //将成功的函数赋值给resolvePromise,表明可以在外面去控制promise的状态,什么时候成功
    resolvePromise = resolve;
  });

  var token = this;
  //executor函数立即执行,同时传递一个cancel函数这位参数,这个cancel函数还有个参数message,从外面传递进来的,
  //在executor函数里面可以立即执行,也可以将cancel函数保存起来,后面去执行,看具体使用场景
  executor(function cancel(message) {
    if (token.reason) {
      // Cancellation has already been requested
      return;
    }

    token.reason = new Cancel(message);
    //调用取消函数让上面的promise状态变成成功状态,
    resolvePromise(token.reason);
  });
}

1.executor函数立即执行,同时传递一个cancel函数这位参数,这个cancel函数还有个参数message,从外面传递进来的
2.在executor函数里面可以立即执行,也可以将cancel函数保存起来,后面去执行,看具体使用场景,下面的代码就是立即执行,也即是在拦截器里面对取消了请求

 config.cancelToken = new CancelToken(cancel => cancel('请不要重复提交!'))//取消的是当前的请求(并且不会走到error里)
//config.cancelToken就是CancelToken的实例
if (config.cancelToken) {
      // config.cancelToken.promise也就是上面的那个promise实例,当状态变成成功的时看看实际做了什么?实际
      config.cancelToken.promise.then(function onCanceled(cancel) {
        if (!request) {
          return;
        }
		//也就是在成功的回调里面调用了请求的中断方法
        request.abort();
        //将cancel的实例传递给请求失败错误的回调,这个error对象就是cancel对象,他有个message,属性就是我们传递进屋的msg
        reject(cancel);
        // Clean up request
        request = null;
      });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值