export default function debounce(fn, delay = 500, immediate = false, resultCallback) { // 1.定义一个定时器, 保存上一次的定时器 let timer = null let isInvoke = false // 2.真正执行的函数 const _debounce = function(...args) { return new Promise((resolve, reject) => { // 取消上一次的定时器 if (timer) clearTimeout(timer) // 判断是否需要立即执行 if (immediate && !isInvoke) { const result = fn.apply(this, args) if (resultCallback) resultCallback(result) resolve(result) isInvoke = true } else { // 延迟执行 timer = setTimeout(() => { // 外部传入的真正要执行的函数 const result = fn.apply(this, args) if (resultCallback) resultCallback(result) resolve(result) isInvoke = false timer = null }, delay) } }) } // 封装取消功能 _debounce.cancel = function() { console.log(timer) if (timer) clearTimeout(timer) timer = null isInvoke = false } return _debounce }
原创文章,作者:dweifng,如若转载,请注明出处:https://blog.ytso.com/270391.html