Ответ 1
_.debounce
создает функцию, которая отменяет функцию, переданную в нее. То, что делает ваша функция s.search
, снова и снова вызывает _.debounce
каждый раз, когда вызывается s.search
. Это каждый раз создает совершенно новую функцию, поэтому отрицать нечего.
Поэтому решение состоит в том, чтобы убрать стрелку и лишнюю пару скобок и убедиться, что 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>