gazes12
@gazes12

Как корректно реализовать данную функцию?

Здравствуйте!

localStorage.setItem('globalTime', $.now());
var isThrottle = false;

const throttle = (func, ms) =>{
    return function(){
        if(isThrottle){
            return;
        }

        func.apply();
        isThrottle = true;

        let difference;
        let currentTime;
        let timer = setInterval(() =>{
            currentTime = $.now();
            difference = Math.abs(currentTime - localStorage.getItem('globalTime'));
            console.log(difference);
           if(difference > ms){
                clearInterval(timer);
                recalls_results.html(`<div class="recalls__result recalls__result--succ">Отправляйте!</div>`);
                recalls__reminder.removeClass('visible');
                isThrottle = false;
                setTimeout(() => recalls_results.html(''), 2000);
           }
        }, 1000);
    }
}


Проблем в том, что difference изначально равен 2000 - 3000ms, а когда запускаю функцию второй раз, то оно вообще игнорирует условие.
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Khalit
Во впервых globalTime у вас необновляется а currentTime все время увеличивается что означает разница между ними будет только расти и только один раз он может быть меньше чем ms я бы вычислял его при каждом вызове функции когда isThrottle равно false. Во вторых я бы сделал её переменной и переместил бы внутрь функции throttle как и переменную isThrottle чтобы каждая созданная функция имела свои данные а так больше одной функции нельзя создать. Можно все это сделать через setTimeout передав ему вторым аргументом не 1000 а ms тогда можно будет избавиться от проверок и от переменной globalTime. Код который вы выполняете чтобы показать на html что вызов возможен можно передавать третьим аргументом в функцию throttle таким образом эта функция станет более универсальной.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы