节流防抖函数

节流防抖是两个不同的函数,但是其作用都是为了优化请求次数,

// 函数节流
function throttle (fn, gapTime) {
  if (gapTime === null || gapTime === undefined) {
    gapTime = 2500
  }
  let _lastTime = null
  return function () {
    let _nowTime = +new Date()
    if (_nowTime - _lastTime > gapTime || !_lastTime) {
      fn.apply(this, arguments)
      _lastTime = _nowTime
    }
  }
}

节流函数:例如在疯狂的点击按钮时,在规定时间内,只触发第一次,当你第二点击的时候,因为当前时间和上一次点击的时间差小于你设定的时间,所以就不会进入if里执行你的自定义函数,在时间差大于你设定的时间后,马上就又可以触发第二次,以此类推,就是说,你规定了2秒钟,那么他只能在2秒钟内触发你第一次的点击。

// 函数防抖
function debounce (fn, interval) {
  var timer
  var gapTime = interval || 1000
  return function (e) {
    clearTimeout(timer)
    var context = this
    timer = setTimeout(function () {
      fn.call(context, e)
    }, gapTime)
  }
}

防抖函数:还是例如疯狂的点击按钮,如果你设定了2秒钟。你在2秒钟内疯狂点击,因为写有clearTimeout,每一次点击都会清除掉上一次的定时器,定时器里面的自定义函数就不会触发。只有你在不点的时候,2秒钟延时过后,这一次点击事件才会触发。意思是说,在规定时间内,只触发最后一次,不管点击多少次,都只触发最后一次,多用于表单提交之类的,防止多次提交。

使用方法,以微信小程序为例,一般这类共用函数都放在utils里。
先引入

import utils from '../../utils/index'

这里定义了一个支付的函数payorder,因为防抖函数里修改了this指针,所以这里可以直接使用this关键字。

    payOrder: utils.debounce(async function () {
      let params = {
        orderId: this.orderId,
        totalfee: this.totalfee
      }
      let Payment = await getPayment(params)
      if (Payment.data !== '调用微信统一下单接口失败') {
        wx.requestPayment({
          timeStamp: `${Payment.data.timeStamp}`,
          nonceStr: Payment.data.nonceStr,
          package: Payment.data.package,
          signType: 'MD5',
          paySign: Payment.data.paySign,
          success (res) {
            console.log(res)
          },
          fail (res) {
            console.log(res)
          }
        })
      }
    }, 2000),
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值