我觉得防抖和节流直接上 Promise 版会更易于理解

来源:16-9 手写节流 throttle

h4ck3r

2020-06-23

//防抖 Promise 版
function debounce(fn, delay = 500) {
  let timer = null
  return (...args) => {
    clearTimeout(timer)
    return new Promise((resolve) => {
      timer = setTimeout(() => {
        resolve(fn(...args))
      }, delay)
    })
  }
}
// 节流 Promise 版
function throttle(fn, delay = 100) {
  let timer = null
  return (...args) => {
    if (timer) {
      return
    }
    return new Promise((resolve) => {
      timer = setTimeout(() => {
        resolve(fn(...args))
        timer = null
      }, delay)
    })
  }
}

没有了 this,更易于理解。讨厌的 this (逃

写回答

1回答

双越

2020-06-23

这样也可以。赞!

0
1
Raymond0913
老师,这里使用promise有什么作用吗?感觉不使用也可以呀。这里也不需要.then呀? function throttle(fn, delay = 100) { let timer = null return (...args) => { if (timer) { return } timer = setTimeout(() => { fn(...args) timer = null }, delay) } } 这样写我测试无论是功能还是this指向都没问题
2021-03-20
共1条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程