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.

Вывод

Здесь появится то, что напечатает программа.