JavaScriptУрок 15 из 16
Промисы и async/await
Сервер, файл или таймер отвечают не сразу, и программа не должна замирать в ожидании. Промис — это обещание значения чуть позже, а await позволяет дождаться его так, будто код идёт по порядку.
Главное
- new Promise((resolve, reject) => …) — resolve отдаёт результат, reject — ошибку
- async function всегда возвращает промис, а await внутри неё ждёт результат
- Ошибку из await ловят обычным try...catch
- Порядок: сначала весь обычный код, потом промисы, потом таймеры — даже setTimeout с 0
- Promise.all([…]) ждёт сразу несколько промисов
Пример
console.log("1: code runs top to bottom");setTimeout(() => console.log("4: a timer, even with 0 ms"), 0);Promise.resolve().then(() => console.log("3: a resolved promise"));console.log("2: still the same pass"); const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); async function later() { await wait(0); console.log("5: after await"); return "result";} later().then((value) => console.log("6:", value));Номера показывают настоящий порядок: синхронные строки, затем промис, затем таймер. later() дождалась таймера через await, а её return достался then.
Задание
Как пользоваться редактором⌘ Enter или Ctrl Enter — запустить код, ⇧ ⌘ Enter — проверить задание.Tab и Shift Tab сдвигают строку или выделение; Esc, затем Tab — выйти из редактора.Проверка сравнивает то, что напечатала программа, с заданием; пробелы в конце строк не важны.После двух неудачных проверок можно открыть решение. Ваш код сохраняется в этом браузере.Допишите track(id): дождитесь getOrder(id) через await и выведите Order 7: Margherita in 20 min, а если заказа нет — поймайте ошибку в try...catch и выведите её message. Вывод: Checking orders..., Order 7: Margherita in 20 min, Order 9 not found и All done.
Вывод
Здесь появится то, что напечатает программа.