Я хочу использовать JS Throttle. Но я изо всех сил пытаюсь заставить его работать правильно.
Я попробовал код из этой статьи: https://codeburst.io/throttling-and-debouncing-in-javascript-b01cad5c8edf
Но дроссельная заслонка не работает должным образом, так как каждый раз, когда я нажимаю на кнопку, один "|" добавляется в div. Ни один клик не был сброшен.
where is the misstake?
function foo() {
$("#respond").append("|");
}
const throttle = (func, limit) => {
let inThrottle
return function() {
const args = arguments
const context = this
if (!inThrottle) {
func.apply(context, args)
inThrottle = true
setTimeout(() => inThrottle = false, limit)
}
}
}
var onClick = function() {
throttle(foo(), 50000);
};
$('#button').click(onClick);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" id="button" value="Click Me" />
<div id="respond"></div>
foo()
->foo
в противном случае вы выполняете функцию немедленно вместо того, чтобы указывать ссылку на функцию для выполнения позже. - person VLAZ   schedule 18.10.2018throttle
, но никогда не выполняете ее. Глядя на код, кажется, что вы действительно хотите сделать$('#button').click(throttle(foo, 50000));
, поэтому вы делаете возвращаемую функцию обработчиком. - person VLAZ   schedule 18.10.2018$('#button').click(throttle(foo, 50000));
работает, а"var onClick = function() { throttle(foo, 50000); }; $('#button').click(onClick);"
нет? - person CL90   schedule 18.10.2018throttle(foo, 50000)
по-прежнему возвращает ссылку на функцию, которую нужно выполнить позже. По сути, происходит то, что ваш обработчик выполняетvar functionReference = throttle(foo, 50000)
, а затем ничего не делает вместо вызоваfunctionReference()
. Наличие функции, которая просто вызывает другую функцию без аргументов (помните, что функция, которую вы получаете, не принимает никаких аргументов, поэтому вы как бы получаете немного запаха кодаgiveCallback(() => otherFunc())
проще выразить какgiveCallback(otherFunc)
, поэтому я предложил прямо дать этоfunctionReference
в качестве обработчика. - person VLAZ   schedule 18.10.2018