LoDash debounce接受maxWait
选项。
来自文档:
[options.maxWait]
(数字):允许最长时间func
在被调用之前被延迟。
我很困惑,是不是和使用throttle一样?有什么区别?
答案 0 :(得分:5)
它们是一个类似的概念,但却截然不同。
maxWait
- 调用函数之前等待的时间。
throttle
- 在电话之间等待的时间。
throttle
。当您延迟执行单个事件时,将使用maxWait
。
修改在此处添加更多详细信息:
_throttle和_debounce之间的区别有点微妙。
_debounce创建一个函数:
创建一个函数,该函数将延迟func的执行,直到自上次调用之后经过等待毫秒为止。
而_throttle创建一个函数:
创建一个函数,在执行时,每隔等待毫秒最多只调用一次func函数。
_debounce实际上允许后续调用发生,但延迟了他们的处理,而_throttle在等待期间实际上不允许调用。
你可以多次去抖动一个函数,理论上无限期地延迟它。 maxWait
可用于确保函数最终被调用。
leading
和trailing
选项不会导致其他功能运行;相反,它们控制函数何时执行。
使用leading
会导致函数执行,后续调用将被去抖。
使用trailing
会导致函数在去抖动结束时执行,这可能小于超时。基本上,您允许后续调用在最后一次去抖时间结束后立即发生,而不是强迫它们等待整个超时时间,如果它们在中间开始。
注意:如果前导和尾随选项为true,则只有在等待超时期间多次调用去抖函数时,才会在超时的后沿调用func。
所以,理论上如果你使用了所有3个选项(leading
,maxWait
和trailing
),那么maxWait
就不会发生,因为你永远不会超过等待期间,trailing
只有在同一等待期内调用该函数两次才会发生。
答案 1 :(得分:5)
如果你看一下源代码,你会发现油门实际上是一个薄的去抖动包装。限制使用maxWait属性调用debounce https://github.com/lodash/lodash/blob/master/lodash.js#L6427-L6444
因此,如果您使用maxWait调用debounce并将trailing和leading设置为true,则它将与调用throttle相同。