← Все вопросы

Зачем нужны async/await, если есть промисы?

Задан 10 месяцев назад1.1к просмотров3 ответа
18

Уже разобрался с Promise и .then(). Теперь вижу async/await и не понимаю — это замена промисам или что? Зачем оно?

3 ответа

34
✓ Принятый ответ — помог автору

async/await — это не замена промисам, а более читаемый способ их использовать. Под капотом те же промисы, просто синтаксис похож на обычный последовательный код, без лесенки .then.

Сравни. Через .then:

function load() {
  return fetch('/api/user')
    .then(r => r.json())
    .then(user => fetch('/api/posts/' + user.id))
    .then(r => r.json());
}

Через async/await:

async function load() {
  const r1 = await fetch('/api/user');
  const user = await r1.json();
  const r2 = await fetch('/api/posts/' + user.id);
  return await r2.json();
}

Читается сверху вниз как обычный код. await «ждёт» промис и достаёт из него значение. Ошибки ловишь привычным try/catch:

try {
  const data = await load();
} catch (err) {
  console.log(err);
}

Важно: await можно использовать только внутри функции, помеченной async.

Ильнур Сахапов после этого .then больше писать не хочется 😄 · 9 месяцев назад
16

Чтобы асинхронный код читался как синхронный, сверху вниз, без вложенных .then. Это сахар над теми же промисами.

8

Читаемость. Это те же промисы, но без лапши.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект