Untitled
unknown
javascript
3 years ago
1.2 kB
9
Indexable
const someCalc = function(a) {
console.log(a + this.b)
};
function throttle(callback, wait, context = this) {
// Ваш код здесь
let nextCall = undefined;
let madeFirstCall = false;
let intervalId;
const f = function (...args) {
if (!madeFirstCall) {
madeFirstCall = true;
callback.bind(this)(args);
} else {
nextCall = [callback, [...args]];
}
intervalId = setTimeout( () => {
if (nextCall !== undefined) {
nextCall[0].bind(this)(nextCall[1]);
nextCall = undefined;
}
madeFirstCall = false;
clearTimeout(intervalId);
}, wait);
};
return f.bind(context);
}
// затормозить функцию до одного раза в 1000 мс
const f1000 = throttle(someCalc, 1000, {b: ' call'});
f1000(1); // выведет 1 call
f1000(2); // (тормозим, не прошло 1000 мс)
f1000(3); // (тормозим, не прошло 1000 мс)
setTimeout(() => {
f1000(30); // (тормозим, не прошло 1000 мс)
}, 2000);
// когда пройдёт 1000 мс...
// выведет 3 call, промежуточное значение 2 call игнорируется
Editor is loading...