Що таке async/await у JavaScript
async та await — це синтаксичний цукор над промісами, введений у ES2017, який дозволяє писати асинхронний код так, ніби він є синхронним.
async— робить функцію асинхронною, автоматично повертаючи Promise.await— призупиняє виконання всерединіasyncфункції, поки проміс не завершиться (успішно або з помилкою).
Простий приклад
javascript
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function greet() {
console.log("Waiting...");
await delay(1000); // Чекати 1 секунду
console.log("Hello after 1 second!");
}
greet();async: Як це працює?
javascript
async function foo() {
return 42;
}
foo().then(result => console.log(result)); // 42Навіть якщо функція повертає просте значення,
asyncобгортає його вPromise.
await: Як це працює?
javascript
async function fetchUser() {
const res = await fetch("/user.json");
const data = await res.json();
return data;
}awaitпризупиняє виконання, покиfetchне поверне результат.- Після завершення результат передається змінній, і виконання продовжується.
Обробка помилок
З async/await зручно використовувати try/catch:
javascript
async function getData() {
try {
const response = await fetch("/api");
const data = await response.json();
console.log(data);
} catch (error) {
console.error("An error occurred:", error);
}
}Особливості
awaitможе використовуватися тільки всередині асинхронної функції.awaitпрацює лише з промісами (або будь-якими об'єктами, що підтримують then).- Якщо
awaitповертає помилку, вона викидається і перехоплюється вcatch.
Підсумок
async/awaitробить асинхронний код зрозумілим, лінійним і чистим.- Це не замінює проміси, але спрощує їх використання.
- Завжди обробляйте помилки за допомогою
try/catchабо.catch().
Добре знати:
await не блокує головний потік! Він лише призупиняє виконання поточної асинхронної функції, звільняючи потік для інших завдань.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.