首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lodash去弹跳不是去弹跳

Lodash去弹跳不是去弹跳
EN

Stack Overflow用户
提问于 2015-03-19 03:59:00
回答 2查看 44.3K关注 0票数 27

我正在尝试debounce a function using Lodash,虽然它正在调用这个函数,但它似乎根本没有取消它。我的问题似乎与我在其他地方看到的on SO或谷歌的错误不一样(通常,他们没有调用_.debounce返回的函数)。

我目前非常简单的实现如下(在Angular中使用CoffeeScript):

代码语言:javascript
复制
  s.search = -> _.debounce( s._makeSearchRequest, 1000 )()

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

在JS中,我相信这是:

代码语言:javascript
复制
  s.search = function() { _.debounce( s._makeSearchRequest, 1000 )() }

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

我通过在输入框中输入来运行s.search(),如果我非常快速地输入胡言乱语,控制台会在每次按键时打印出"making search request“,每秒打印很多次--这表明它根本没有被解锁。

你知道我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 04:14:46

_.debounce创建了一个函数,该函数去掉了传递给它的函数。您的s.search函数所做的就是在每次调用s.search时重新调用_.debounce。这样每次都会创建一个全新的函数,所以没有什么好去掉的。

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

代码语言:javascript
复制
s._makeSearchRequest = -> console.log("making search request")

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

示例(使用JavaScript):

代码语言: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);
代码语言:javascript
复制
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.min.js"></script>

票数 45
EN

Stack Overflow用户

发布于 2015-03-19 04:10:41

试试这个:

代码语言:javascript
复制
s._makeSearchRequest = function() {
    console.log("making search request");
}

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

POC:http://jsfiddle.net/bvaughn/3saj6znk/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29131561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档