老师,这样请求多次请求只能拦截一部分

老师,这样请求多次请求只能拦截一部分

目前业务里多次请求只是一个消息提醒,没有确认弹框,如果请求2次,会拦截1个,如果更多次请求,比如4次,因为每个请求第2次都会删掉,导致只能拦截2个,还是会重复添加2次。

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

这个可能是removePending()这部分的问题,按照下面的写法,先判断pending[key]如果存在,而且是一个request,说明是重复request,就要取消重复请求,然后把pending[key]删掉,这样就会产生一个逻辑问题,重复请求后取消了重复的request以后还会把pending[key]删掉,这样第三次重复请求的时候pending[key]不存在,就会重复发送了

removePending (key, isRequest = false) { 
if (this.pending[key] && isRequest) { 
    this.pending[key]('取消重复请求')
 } 
delete this.pending[key] }

建议可以改成这样,如果this.pending[key]存在,且是request请求,说明是重复的request,就取消重复request,然后返回不删除pending[key],如果是pending[key]存在,但isRequest=false,则说明是response调用的removePending,这时候可以删除pending[key],取消pending状态,如果this.pending[key]不存在,不管是不是request调用的removePending方法都不做操作,这样应该就可以解决只拦截一部分重复请求的问题了

removePending (key, isRequest = false) { 
 if (this.pending[key]) {
  if (isRequest) {
    this.pending[key]('取消重复请求')
  } else {
    delete this.pending[key]
  }
}


提问者 又年00 2020-06-15 22:05:19

我这边业余是个添加表单功能,调试时候看到拦截是取消了,但是刷新列表时候显示了多天同样的数据,我这个应该是不涉及参数变化吧

  • Brian #1
    你用了本地缓存吗?如果接口没有请求成功,怎么会有数据呢?
    2020-06-15 23:11:48
Brian 2020-06-15 21:54:28
Brian 2020-06-15 21:53:24

你的请求参数变化了,那就没法cancel,知道吗?相同的请求,是指url一样!

  • 提问者 又年00 #1
    老师,我这边业余是个添加表单功能,调试时候看到拦截是取消了,但是刷新列表时候显示了多条同样的数据,我这个应该是不涉及参数变化
    2020-06-15 22:06:35
  • 提问者 又年00 #2
    我明天把代码和截图发出来下
    2020-06-15 22:11:02
提问者 又年00 2020-06-15 16:41:26

刚测试了下,貌似多次重复请求只能拦截第一次,点两次拦截一次,点五次还是拦截一次

  • Brian #1
    那就试试axios里面的CancelToken~取消之前的请求~~
    2020-06-15 21:52:20
  • Brian #2
    show me your code!
    2020-06-15 21:52:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师