По суті нічим: async/await - зручніший запис тих самих Promise. Асинхронний код читається зверху вниз, як синхронний.
// then()
function loadUser(id) {
return fetch(`/api/users/${id}`)
.then((r) => r.json())
.then((user) => user.name);
}
// async/await
async function loadUser(id) {
const response = await fetch(`/api/users/${id}`);
const user = await response.json();
return user.name;
}
Правила:
async-функція завжди повертає Promise.return 5у ній - цеPromise, що виконається з 5.awaitчекає Promise і повертає його значення. Якщо Promise відхилено,awaitкидає виняток.- Помилки ловлять звичайним
try/catch.
try {
const user = await loadUser(1);
} catch (error) {
showError(error.message);
}
Пастка - зайва послідовність:
const user = await loadUser(); // чекаємо
const posts = await loadPosts(); // і лише тоді починаємо друге
Якщо запити незалежні, їх запускають разом: const [user, posts] = await Promise.all([loadUser(), loadPosts()]);.
await на верхньому рівні (поза функцією) працює в ES-модулях.