setTimeout, clearTimeout, формирующий время ожидания сброса, не работает.проблема времени console.log? - PullRequest
1 голос
/ 15 марта 2019

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

let TIMEOUT = null;

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

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

const resetModalTimeout = (randomFunction) => {
  // console.log('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.log s, она отлично работает. То, как код отображается сейчас, не работает. Он будет проходить только через цикл First (так что работайте только в течение 30 секунд, даже если я изменю вход). и когда я регистрируюсь, это ясно показывает, что изменения проходят. Есть идеи? Конечно, я не хочу console.log в основном коде, также я использую hyperapp (существующая база кода). При ведении журнала я вижу, что значение TIMEOUT меняется, как и ожидалось.

1 Ответ

1 голос
/ 15 марта 2019

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

...