前端如何实现请求防抖

前端实现请求防抖

前言:最近做一个uni-app的h5项目,实现一个购物车商品数量加减发送请求时候,发现快速点击会发送多个请求给后端,直接导致整个页面在服务请求加载。

我需要解决这个问题,实现只发送最后一次请求,然后本作者就想到了 →防抖

1. 调试问题

本人去网上看了大多的防抖函数,都没能实现我想要的请求功能。本人请求函数用Promise,我发现大多在封装的防抖函数都是return返回一个函数包裹着定时器,导致我的请求并没有执行!

比如这种防抖代码(是不成功的)

function debounce(func, timeout) {
  let timer;
  return function () {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      timer = null;
      func();
    }, timeout);
  };
}

2. 解决方案

  1. 直接return返回请求函数就OK了,防抖函数 代码如下

	let isTime = "" //time标识存放容器
	//请求防抖
	const AjaxShake = (fn, time) => {
	
		clearTimeout(isTime)
		return isTime = setTimeout(async () => {
			 await fn()
			console.log('定时对象', isTime)
		}, time)
		
	}

  1. 使用(本人把函数放到vue的原型上了)
this.$u.utils.AjaxShake( ()=>{
					this.$u.api.CartsNum(item.id, {
						num: item.num
					})
				},500)

传一个空函数,里面是我们的请求函数。还有传时间差time
AjaxShake( function , int )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值