gpt4 book ai didi

javascript - Lodash Debounce 不去抖动

转载 作者:行者123 更新时间:2023-12-03 02:23:01 27 4
gpt4 key购买 nike

我正在尝试debounce a function using Lodash ,当它调用该函数时,它似乎根本没有消除它。我的问题似乎与我在其他地方看到的错误不同on SO或 Google(通常,他们不会调用 _.debounce 返回的函数)。

我目前的 super 简单实现如下(在 Angular 和 CoffeeScript 中):

  s.search = -> _.debounce( s._makeSearchRequest, 1000 )()

s._makeSearchRequest = -> console.log("making search request")

在 JS 中,我相信是:

  s.search = function() { _.debounce( s._makeSearchRequest, 1000 )() }

s._makeSearchRequest = function() { console.log("making search request") }

我通过在输入框中键入内容来运行s.search(),如果我非常快地输入乱码,控制台会在每次按键时打印出“正在发出搜索请求”,每次按键都会打印很多次第二——表明它根本没有被反跳。

知道我做错了什么吗?

最佳答案

_.debounce 创建一个函数,该函数对传入的函数进行反跳操作。您的 s.search 函数所做的是每次调用 s.search 时都会再次调用 _.debounce 。这每次都会创建一个全新的函数,因此没有什么可以反跳的。

因此,解决方案是删除箭头和多余的一对括号,并确保在访问之前定义了 s._makeSearchRequest:

s._makeSearchRequest = -> console.log("making search request")

s.search = _.debounce( s._makeSearchRequest, 1000 )

示例(使用 JavaScript):

var s;

s = {};

s._makeSearchRequest = function(q) {
return console.log("making search request: " + q);
};

s.search = _.debounce(s._makeSearchRequest, 1000);

// call s.search three times in a row
s.search(1);
s.search(2);
s.search(3);

// call s.search after 500 ms
setTimeout(s.search, 500, 4);

// call s.search after 3 seconds
setTimeout(s.search, 3000, 5);

// timer to show passage of time
var i = 0;
var t = setInterval(function () {
i += 1;
console.log(i + " seconds elapsed");
if (i > 5) { clearInterval(t); }
}, 1000);
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.min.js"></script>

关于javascript - Lodash Debounce 不去抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com