Skip to content

💤

javascript
function asyncify(fn) {
  const originalFn = fn
  let timer = setTimeout(() => {
    timer = null
    if (fn) fn()
  }, 0)

  fn = null

  return function (...args) {
    if (timer) {
      // 将originalFn绑定到this和args,并赋值给fn,fn会在timer执行时调用
      fn = originalFn.bind(this, ...args)
    } else {
      // 已经是异步,直接调用originalFn
      originalFn.apply(this, args)
    }
  }
}