setTimeout Vs. спящий режим - PullRequest
       39

setTimeout Vs. спящий режим

4 голосов
/ 03 марта 2020

Из того, что я понял в нескольких ответах SO, если компьютер переходит в режим ожидания после вызова setTimeout, период ожидания следует игнорировать.

Например:

  • t0: setTimeout(foo, 30000);
  • t0 + 20 с: компьютер переходит в спящий режим
  • t0 + 40 с: компьютер выходит из спящего режима
  • t0 + 50 с: foo is с именем

Но мои тесты показывают следующее поведение:

  • t0: setTimeout(foo, 30000);
  • t0 + 20 с: компьютер переходит в спящий режим
  • t0 + 40 с: компьютер выходит из спящего режима и foo называется

Насколько я понимаю, когда компьютер просыпается, если тайм-аут был бы запущен во время периода сна, он мгновенно срабатывает, в противном случае он срабатывает в момент времени t0 + [значение таймаута].

Итак, каково ожидаемое поведение? Это одинаково для всех браузеров и ОС?

Один из моих тестов (с последней версией Chrome на Windows 10): https://codepen.io/robloche/pen/GRJvEJB

1 Ответ

0 голосов
/ 05 марта 2020

Подводя итог комментариям выше:

  • Поведение, которое я описываю, кажется, имеет смысл для всех.
  • Я все еще не уверен, что соответствует спецификациям или что все браузеры реализовать его таким образом.

Моя первоначальная проблема - обновление токена аутентификации. В итоге я нашел решение, которое не использует setTimeout (спасибо { ссылка }):

  • Когда я получаю токен, я вычисляю и сохраняю следующую дату обновления
  • Я использую setInterval, чтобы регулярно проверять, что следующая дата обновления уже прошла .

Таким образом, не имеет значения, если компьютер просыпается за 1 секунду до следующей даты обновления или через 36 часов после.

...