Решён
Как применяют промисы в различных проектах - реальные примеры?

Павел Frontend JavaScript
5.3k
7

Изучаю JavaScript, дошел до промисов. В теории вроде понял - это объект для работы с асинхронным кодом, есть состояния pending/fulfilled/rejected, методы then/catch/finally.

Но все примеры в туториалах какие то синтетические - fetch запросы к JSONPlaceholder, setTimeout с console.log. Хочется понять как промисы применяют в реальной разработке.

Можете привести примеры из своих проектов - где именно вы используете промисы и почему? Интересуют практические кейсы, а не учебные.

Решение
58
Эксперт • 2 ответа

Самый частый кейс - цепочки зависимых запросов к API.

Например, в админке интернет-магазина:

  1. Получаешь список категорий
  2. Для выбранной категории грузишь товары
  3. Для каждого товара подтягиваешь статистику продаж
  4. На основе всего этого рендеришь дашборд

Без промисов превращается в callback hell. С промисами:

fetchCategories()
  .then(categories => fetchProducts(categories[0].id))
  .then(products => Promise.all(
    products.map(p => fetchStats(p.id))
  ))
  .then(stats => renderDashboard(stats))
  .catch(error => showError(error));

В реальности уже все на async/await переписывают, но суть та же.

Аватар Павел Frontend

Отлично, спасибо! Как раз такой пример и нужен был. Про Promise.all тоже полезно

42
Участник • 1 ответ

Еще классный кейс - retry логика при падении запросов.

Когда API тормозит или сеть плохая, можно завернуть fetch в промис с автоматическими повторами:

function fetchWithRetry(url, attempts = 3) {
  return fetch(url)
    .catch(err => {
      if (attempts === 1) throw err;
      return fetchWithRetry(url, attempts - 1);
    });
}

В продакшене добавляем задержки между попытками (exponential backoff), но суть в том что промис позволяет элегантно обработать цепочку повторов.

34
Эксперт • 2 ответа

У нас в проекте промисы юзаем для загрузки файлов с прогрессом. FileReader возвращает события, а мы их оборачиваем в промис чтоб потом async/await применить:

function readFileAsDataURL(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = reject;
    reader.readAsDataURL(file);
  });
}

Потом можно await readFileAsDataURL(file) и работать с результатом синхронно по виду.

0
Участник • 1 ответ

промисы это вчерашний день, учи сразу async await и забудь про then catch, в 2026 году никто уже промисами напрямую не пользуется

Аватар Тимофей Орлов

Async/await ПОД КАПОТОМ использует промисы. Не понимая промисы, async/await не поймешь толком.

49
Участник • 1 ответ

Мы делали систему уведомлений где нужно было отправить пуш, емейл и смс параллельно, но подождать пока ВСЕ три отправятся чтоб логировать результат.

Promise.all спас:

Promise.all([
  sendPushNotification(userId, message),
  sendEmail(userEmail, message),
  sendSMS(userPhone, message)
])
.then(results => {
  logSuccess(results);
})
.catch(error => {
  logFailure(error);
});

Важный нюанс - если хоть один промис зареджектится, весь Promise.all упадет. Для ситуаций где надо чтоб частичный успех тоже считался, есть Promise.allSettled.

18
Эксперт • 2 ответа

В Node.js промисы везде. Работа с базой данных, файловой системой (fs.promises), внешними API.

Без промисов пришлось бы писать коллбеки как в старые добрые времена Node 0.10. А это прямой путь к спагетти-коду где ошибки теряются и дебажить невозможно.

0
Участник • 2 ответа

может кто то объяснить зачем вообще промисы нужны если можно просто ждать пока функция выполнится... я вот до сих пор не понял эту асинхронность

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.