老师,这样请求多次请求只能拦截一部分
目前业务里多次请求只是一个消息提醒,没有确认弹框,如果请求2次,会拦截1个,如果更多次请求,比如4次,因为每个请求第2次都会删掉,导致只能拦截2个,还是会重复添加2次。
38
收起
正在回答
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] } }
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星