@Kalerss

Как сделать функцию debounce?

Всем доброго вечера, помогите, пожалуйста, с функцией debounce
Делаю так:
const debounce = (fn, debounceTime) => {
    let timeout;
    return function() {
        clearTimeout( timeout );
        timeout = setTimeout( fn, debounceTime );
    }
}

Проходит первый тест:
✓ должна блокировать вызовы функции в течение времени задержки,
пока функция вызывается снова ранее, чем прошло время задержки (7ms)
✕ должна передать контекст вызова и аргументы debounced-функции в оригинальную функцию (5ms)
Делаю так:
const debounce = (fn, debounceTime) => {
    let count = -Infinity;
    let res;
    return function() {
        const end = Date.now();
        if (end - count >= debounceTime) {
            count = end;
            res = fn.apply(this, arguments);
        }
        return res;
    };
}

Проходит второй тест:
✕ должна блокировать вызовы функции в течение времени задержки,
пока функция вызывается снова ранее, чем прошло время задержки (6ms)
✓ должна передать контекст вызова и аргументы debounced-функции в оригинальную функцию (3ms)
Как объеденить?
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
timeout = setTimeout( () => fn.apply(this, arguments), debounceTime );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы