防抖函数在vue失效

207 阅读1分钟
//防抖函数
export function debounce(func, wait, immediate) {
  let timeout // 计时器
  console.log('wait', wait)
  return function(...args) {
    // args就是传的参数
    const context = this
    if (timeout) clearTimeout(timeout) // 如果有计时器就清除计时器
    if (immediate) {
      // 如果立即执行设置为true
      const callNow = !timeout // 定时器为空就是true
      timeout = setTimeout(function() {
        // 开启定时器
        timeout = null
      }, wait) // wait:定时器的时间
      if (callNow) func.apply(context, args) // 定时器为空的话就执行把传进来的函数指向改变为这个防抖函数,然后把参数传给这个防抖函数。通过return把参数返回。
    } else {
      console.log(wait)
      // 立即执行为false就开个定时器在执行这个函数
      timeout = setTimeout(function() {
        func.apply(context, args)
      }, wait)
    }
  }
}
import { debounce } from '@/utils/util'
  change: debounce(
      async function() {
        const par = {}
        par.motorcadeId = this.$route.query.motorcadeId
        par.carTypeCode = this.$route.query.carTypeCode
        par.reconfirmInvoicePrice = this.formInfo.reconfirmInvoicePrice
        if (this.formInfo.reconfirmInvoicePrice) {
          const res = await fetchSecondMsrpPriceApp(par)
          if (!res.data.success) {
            Toast.fail({
              message: res.data.message,
              forbidClick: true,
              duration: 2000
            })
            return
          }
          this.formInfo.marketPriceOrginRemark = res.data.info.marketPriceOrginRemark || ''
        } else {
          this.formInfo.marketPriceOrginRemark = ''
        }
        this.$forceUpdate()
      },
      500,
      false
    ),