Итоги
В этом уроке вы узнали, что:
setTimeout(function () { ... }, 2000)запускает функцию один раз, через 2000 миллисекунд (2 секунды). Передавайте саму функцию, без().- Скрипт не ждёт таймер: строки после
setTimeout()выполняются сразу, поэтому всё, что должно произойти после ожидания, помещается в функцию. setTimeout()возвращает идентификатор таймера, аclearTimeout(timer)отменяет таймер. Храните идентификатор в переменнойletснаружи обработчиков, чтобы им мог пользоваться каждый обработчик.setInterval(function () { ... }, 1000)запускает функцию каждую секунду, покаclearInterval(timer)не остановит её. Переменная снаружи функции помнит то, что меняется между запусками, например оставшиеся секунды.button.disabled = true;отключает кнопку, пока страница занята, аfalseвключает её снова.- Функция, которой нужно время, возвращает промис — значение, которое приходит позже.
awaitждёт это значение и работает только в функции, помеченнойasync. Безawaitвы получите сам промис, и страница покажет[object Promise]. - Функция
asyncможет ждать несколько раз, шаг за шагом, например с помощьюawait wait(1000);. Остальная страница в это время продолжает работать. - Сообщение вроде
Загрузка…передawaitговорит пользователю, что страница чего-то ждёт. - Когда промис завершается неудачей,
awaitбросает ошибку.try { ... } catch (error) { ... }её ловит, аerror.message— это её текст.finallyвыполняется в конце в обоих случаях.
В следующем уроке, «Данные с сервера», ваши страницы будут загружать данные с сервера через fetch(), который тоже возвращает промис, так что await вам будет нужен постоянно.
Но сначала немного практики с таймерами: молниеносная викторина, в которой у игрока всего 2 секунды на ответ. На этот раз script.js пуст, и всю программу вы напишете сами.
Задание
- 1
Когда нажата кнопка
#start, поставьте таймер: через 2 секунды в#resultпоявляетсяВремя вышло!Сохраните таймер в переменнойtimer, созданной черезletснаружи обработчика, — она скоро понадобится. - 2
Когда нажата
#jupiter, покажите в#resultтекстВерно!и отмените таймер, чтобыВремя вышло!его не заменило. - 3
Марс и Венера — неверные ответы: когда нажата любая из этих кнопок, покажите
Неверно! Это Юпитер.и тоже отмените таймер.