Из того, что я понял в нескольких ответах SO, если компьютер переходит в спящий режим после вызова setTimeout
, период ожидания следует игнорировать.
Например:
- t0:
setTimeout(foo, 30000);
- t0+20s: компьютер переходит в спящий режим
- t0+40s: компьютер выходит из спящего режима
- t0+50s:
foo
вызывается
Но мои тесты показывают следующее поведение:
- t0:
setTimeout(foo, 30000);
- t0+20s: компьютер переходит в спящий режим
- t0+40s: компьютер выходит из спящего режима и вызывается
foo
Насколько я понимаю, когда компьютер просыпается, если тайм-аут должен был быть активирован во время периода сна, он срабатывает мгновенно, в противном случае он срабатывает в t0+[значение тайм-аута].
Итак, каково ожидаемое поведение? Одинаково ли это во всех браузерах и ОС?
Один из моих тестов (с последней версией Chrome в Windows 10): https://codepen.io/robloche/pen/GRJvEJB
setTimeout
- это максимальное усилие как можно скорее после заданного тайм-аута. Поэтому было бы разумно, чтобы он срабатывал, как только компьютер снова просыпается. Я не уверен, что этот пограничный случай явно описан в спецификации, поэтому здесь каждая реализация может отличаться. - person deceze♦   schedule 03.03.2020My understanding is that when the computer wakes up, if the timeout would have been triggered during the sleep period, it's instantly triggered, otherwise, it's triggered at t0+[timeout value].?
: да - person t.niese   schedule 03.03.202030000
в основном означает через 30 секунд, а не считать до 30, вычитая 1 каждую секунду, когда вы бодрствуете, поэтому наблюдаемое поведение имеет смысл. - person deceze♦   schedule 03.03.2020the counter ticks on from the time the computer fell asleep
, так что это говорит о том же. - person Keith   schedule 03.03.2020