← Все вопросы
Зачем нужны async/await, если есть промисы?
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
Читаемость. Это те же промисы, но без лапши.
Ваш ответ
Войдите, чтобы ответить на вопрос.