SetTimeout, clearTimeout, формирующий тайм-аут сброса, не работает. Проблема со временем в console.info?

В настоящее время у меня появляется модальное окно, и я хочу, чтобы оно исчезло, если пользователь не вводит свой пароль в течение 30 секунд. Это работает, но когда я попытался реализовать это с помощью события onChange на Вход, оно перестало работать. Странно то, что когда я использую console.info для проверки, это работает. Как только я удаляю эти console.info, это не работает. Просто интересно, видел ли кто-нибудь это раньше?

let TIMEOUT = null;

const setModalTimeout = randomFunction => {
  if (TIMEOUT === null) {
    // console.info('NOTE: set timeout before', TIMEOUT, new Date().toLocaleTimeString());
    TIMEOUT = setTimeout(() => randomFunction(false), MODAL_TIMEOUT);
  }
  // console.info('NOTE: set timeout after', TIMEOUT, new Date().toLocaleTimeString());
};

const clearModalTimeout = (done) => {
  if (TIMEOUT !== null) {
    // console.info('NOTE: clear timeout before', TIMEOUT, new Date().toLocaleTimeString());
    clearTimeout(TIMEOUT);
    TIMEOUT = null;
  }
  // console.info('NOTE: clear timeout after', TIMEOUT, new Date().toLocaleTimeString());
  done && done();
};

const resetModalTimeout = (randomFunction) => {
  // console.info('NOTE: reset timeout', TIMEOUT, new Date().toLocaleTimeString());
  clearModalTimeout();
  setModalTimeout(randomFunction);
}

Сверху логика, снизу входной тег.

<input type = "password" placeholder = "pin/password" id = "password" oncreate = {element => element.focus()} onchange = {() => resetModalTimeout(randomFunction)} />

Основная часть этой проблемы заключается в том, что если я раскомментирую console.infos, все работает отлично. В том виде, в котором код показан сейчас, он не работает. Он будет проходить только через цикл Первый (поэтому работает только в течение 30 секунд, даже если я внес изменения во входные данные). и когда я регистрируюсь, это ясно показывает, что изменения происходят. Есть идеи? Конечно, мне не нужен console.info в основном коде, также я использую гиперприложение (существующая кодовая база). При ведении журнала я вижу, что значение TIMEOUT изменяется, как и ожидалось.

Где первоначально было определено TIMEOUT? let TIMEOUT = null

epascarello 15.03.2019 17:07

@epascarello Извините, я должен был упомянуть и это! У меня это выходит за рамки, при регистрации я вижу изменение значения (на ноль и на целое число и т. д.)

thatdevop 15.03.2019 17:21

Не могли бы вы предоставить проверяемый фрагмент кода?

Olafant 15.03.2019 17:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
70
1

Ответы 1

Я только что понял, в чем дело. После дополнительной отладки мы с коллегой поняли, что это связано с хуком жизненного цикла. Это должно быть oninput, а не onchange. На моем компьютере onchange нормально работал при регистрации (не совсем понимаю, почему, если у кого-то есть ответ на этот вопрос), но не на компьютере моего коллеги. Когда он был изменен на oninput, он отлично работал для нас обоих. onchange ждал, когда фокус покинет Вход.

Другие вопросы по теме