JS手写防抖(debounce)函数
function myDebounce(fn, delay, immidiate = false, callback) {
let timer = null
let isInvoke = false
function _debounce(...args) {
return new Promise((resolve, reject) => {
try {
if (timer) {
clearTimeout(timer)
}
if (immidiate && !isInvoke) {
const res = fn.apply(this, args)
callback && callback(res)
resolve(res)
isInvoke = true
}
timer = setTimeout(() => {
const res = fn.apply(this, args)
callback && callback(res)
resolve(res)
isInvoke = false
}, delay);
} catch (error) {
reject(error)
}
})
}
_debounce.cancel = function () {
clearTimeout(timer)
isInvoke = false
}
return _debounce
}