Что мне нужно изменить, чтобы увидеть обратный отсчет?
Много. Никогда не пытайтесь sleep
синхронно. Это заблокирует все, что просто плохо. Вместо этого просто используйте async
/ await
, который «спит» неблокирующим способом:
const sleep = ms => new Promise(res => setTimeout(res, ms));
(async function() {
for(let n = 0; n < 4; n++) {
document.body.textContent = n;
await sleep(1000);
}
})();
Когда срабатывает requestAnimationFrame?
Где-то в цикле событий. Но поскольку вы блокируете браузер синхронно, он никогда не входит в цикл обработки событий, следовательно, он не меняет вывод.
PS: requestAnimationFrame
, запросы один кадр анимации. Чтобы обновить интерфейс несколько раз, вам нужно вызывать его несколько раз.