Традиционный код на основе callback'ов создаёт то, что известно как "callback hell" — глубоко вложенные функции, образующие так называемую "пирамиду гибели", что делает код сложным для чтения и поддержки.
fetchUser(id, function(user) {
fetchPosts(user, function(posts) {
fetchComments(posts[0], function(comments) {
// deeply nested logic
});
});
});
Promises сглаживают эту структуру, позволяя цепочку вызовов через .then(), превращая вложенные callback'и в чистую линейную последовательность.
fetchUser(id)
.then(user => fetchPosts(user))
.then(posts => fetchComments(posts[0]))
.then(comments => console.log(comments))
.catch(err => console.error(err));
Основные преимущества:
.catch()async/await — это синтаксический сахар поверх Promises. Он делает асинхронный код практически неотличимым от синхронного, что максимально упрощает чтение.
async function loadData() {
try {
const user = await fetchUser(id);
const posts = await fetchPosts(user);
const comments = await fetchComments(posts[0]);
} catch (err) {
console.error(err);
}
}
Основные преимущества:
try/catch для обработки ошибокСинтаксис async/await — это фундаментальная альтернатива Promise, а не слой синтаксического сахара, построенный поверх функциональности Promise.
Новый — ещё не проверен сообществом
Вы