js 防抖 debounce

使用场景:防多次触发,并且结果以最后的触发为基准

举例说明:刷新列表

实现方法:当触发执行某个方法A时,将延迟执行一段时间执行,在这段时间内如果又有多次触发执行该方法A,那么延长时间以最后一次触发为基准

/**
 * 防抖
 * @param fn 需要防抖的函数
 * @param t 时间
 */
export const debounce = (fn,t = 300) => {
  let timeId = null
  const delay = t
  return function () {
    let context = this;
    let args = arguments;
    if (timeId) {
      clearTimeout(timeId)
    }
    timeId = setTimeout(() => {
      timeId = null
      fn.apply(context, args)
    }, delay)
  }
}

使用

addNumber = debounce(function(this: any){
  this.setData({
   number: this.data.number + 10
  })
}, 300)