调用_.debounce()会使函数执行多次,而不是延迟执行一次。如何在_.debounce()中获取指定延迟后执行一次的功能?我的用例是在用户停止键入后执行AJAX请求。

例如,键入输入内容将导致1秒钟后在控制台中显示一条消息。在我的示例中,您将看到出现多条消息(键入的每个字母一个)。如何修改我的代码以仅看到一条消息?

https://plnkr.co/edit/3dGm55ZFqWe4V59HLgoC

function onKeyUp() {
    _.debounce(() => {
        console.log('foo');
    }, 1000)();
}
<input onkeyup="onKeyUp()" />

最佳答案

您将在每个按键事件上创建一个新的去抖动功能。相反,您需要创建一次,然后在onKeyUp事件处理程序内部(或相反)使用此函数。

var handler = _.debounce(() => {
  console.log('foo');
}, 1000)

function onKeyUp() {
  handler();
}
<script src="http://underscorejs.org/underscore-min.js"></script>
<input onkeyup="onKeyUp()" />

10-06 15:12