Плюсы промисов
- Цепочки вместо пирамиды вложенности.
- Единый канал ошибок через
.catch / try/catch с await.
- Композиция:
Promise.all, race, allSettled.
- Состояние settle одноразовое и предсказуемое (resolved/rejected).
- Отличная стыковка с
async/await — код почти «синхронный» по виду.
getUser(id, (err, user) => {
getOrders(user.id, (err, orders) => { });
});
const user = await getUser(id);
const orders = await getOrders(user.id);
Минусы / цена
- Нужно помнить microtasks / не блокировать loop тяжёлым sync-кодом после await.
- Забытый
.catch → UnhandledPromiseRejection.
- Легко создать лишние последовательности вместо параллельного
all.
- Отмена не встроена (нужен
AbortController).
- Старый API только с колбэками приходится оборачивать в
new Promise.
Когда колбэки ещё живы
Обработчики событий (addEventListener), многие Node-stream API, места где «много раз» а не «один результат».
Итог: промисы выигрывают в композиции и ошибках; колбэки остаются моделью подписок/событий.