Что такое Promise

Ответ

Promise — это объект, представляющий результат успешного или неудачного завершения асинхронной операции. Он имеет три состояния: pending (ожидание), fulfilled (выполнено), rejected (отклонено).

Пример:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Успех!'), 1000);
});

promise
  .then(result => console.log(result)) // "Успех!"
  .catch(error => console.error(error));

Методы:

  • then() — обрабатывает успешное выполнение.
  • catch() — ловит ошибки.
  • finally() — выполняется в любом случае.
  • Promise.all() — ждёт выполнения всех промисов.
  • Promise.race() — возвращает первый завершённый промис.

Промисы помогают избежать "ада колбэков" и делают асинхронный код более читаемым.

Ответ 18+ 🔞

Давай разберёмся, что за зверь такой этот Промис, а то у меня уже терпения ноль ебать от этих асинхронных танцев с бубном.

Представь, ты даёшь кому-то слово, что что-то сделаешь. Вот этот объект Promise — оно и есть, это обещание. Оно может быть в трёх состояниях: либо ты ещё думаешь, как его выполнить (pending), либо ты его сдержал, красава (fulfilled), либо обосрался и не смог (rejected). Всё просто, как три копейки.

Вот смотри, как это выглядит в коде, не ссы:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Успех!'), 1000); // Через секунду говорим "всё, готово, держи"
});

promise
  .then(result => console.log(result)) // Поймал успех? Выводи "Успех!"
  .catch(error => console.error(error)); // Обосрался? Лови ошибку, не падай.

С этим объектом можно делать разные фокусы, вот основные методы:

  • .then() — это когда всё прошло по маслу, и ты обрабатываешь результат. Типа "ну наконец-то, работай".
  • .catch() — святая святых, ловушка для всех косяков. Без неё — пиши пропало, ошибка уйдёт в никуда, и будешь потом ебаться с дебагом.
  • .finally() — выполнится в любом случае, что бы ни случилось. Хоть успех, хоть пиздец. Как "я всегда мою посуду после готовки".
  • Promise.all() — ждёт, пока все обещания в массиве выполнятся. Если хоть один обосрётся — всё, общий провал. Жёстко, но справедливо.
  • Promise.race() — а это гонки, ёпта! Кто первый выполнился (успешно или с ошибкой) — того и тапки. Остальных в помойку.

Вот зачем эта вся хуйня? А чтобы не попасть в "ад колбэков", где один вызов вложен в другой, тот — в третий, и уже через пять минут ты сам не понимаешь, где ты и что эта функция возвращает. Промисы делают код ровным, как стол, и читаемым. Вроде как.

Короче, выучи эту базу, и жить станет проще. А то будешь потом, как Герасим, только "Му-му" говорить и в озере топиться от безысходности.