我正在尝试debounce a function using Lodash,虽然它正在调用这个函数,但它似乎根本没有取消它。我的问题似乎与我在其他地方看到的on SO或谷歌的错误不一样(通常,他们没有调用_.debounce返回的函数)。
我目前非常简单的实现如下(在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(),如果我非常快速地输入胡言乱语,控制台会在每次按键时打印出"making search request“,每秒打印很多次--这表明它根本没有被解锁。
你知道我做错了什么吗?
发布于 2015-03-19 04:14:46
_.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>
发布于 2015-03-19 04:10:41
试试这个:
s._makeSearchRequest = function() {
console.log("making search request");
}
s.search = _.debounce( s._makeSearchRequest, 1000 );POC:http://jsfiddle.net/bvaughn/3saj6znk/
https://stackoverflow.com/questions/29131561
复制相似问题