Как создать Promise

Ответ

Promise — это объект, представляющий результат асинхронной операции (успешный или неудачный). Создается с помощью конструктора new Promise(), который принимает функцию-исполнитель с двумя параметрами: resolve и reject.

Пример:

const myPromise = new Promise((resolve, reject) => {
  const success = true; // имитация условия
  if (success) {
    resolve('Успех!'); // выполнится при успехе
  } else {
    reject('Ошибка!'); // выполнится при ошибке
  }
});

myPromise
  .then((result) => console.log(result)) // 'Успех!'
  .catch((error) => console.error(error)); // не выполнится

Особенности:

  • resolve и reject принимают только один аргумент
  • Promise может находиться в одном из трех состояний: pending, fulfilled, rejected
  • Для обработки ошибок используйте .catch() или второй аргумент .then()

Ответ 18+ 🔞

А, промисы, блядь! Ну, слушай сюда, разберём эту хуйню по косточкам, чтоб у тебя в голове всё встало на свои ебучки-воробушки.

Вот представь себе, что промис — это такой ёбанный контракт, бумажка, которую тебе выписывает какой-то код. На бумажке написано: «Обещаю, что когда-нибудь в будущем я тебе либо результат дам, либо в жопу пошлю с ошибкой». И всё, хуй с горы. Жди.

Создаётся эта бумажка через new Promise(). А внутрь ему ты суёшь функцию-исполнителя, этакую шаманку, которая и будет колдовать. И даёшь ей два волшебных пендаля: resolve (решить) и reject (отклонить, послать нахуй).

Вот смотри, как это выглядит вживую:

const myPromise = new Promise((resolve, reject) => {
  const success = true; // допустим, тут у нас всё охуенно
  if (success) {
    resolve('Успех!'); // Бах! И бумажка исполняется с результатом
  } else {
    reject('Ошибка!'); // Либо — пиздец, мальчик, всё пропало!
  }
});

И вот эта твоя myPromise теперь живёт своей жизнью. У неё три возможных состояния, как у кота: он либо спит (pending — ожидание), либо срет в тапок (fulfilled — выполнено успешно), либо блюёт на ковёр (rejected — выполнено с ошибкой). Третьего не дано, ёпта.

А чтобы получить результат этой всей ебли, ты к промису цепляешь методы. .then() — это типа «ну, окей, если всё заебись, сделай вот это». А .catch() — это «если всё пошло по пизде, лови ошибку и давай по-тихому разберёмся».

myPromise
  .then((result) => console.log(result)) // Выведет 'Успех!', если повезло
  .catch((error) => console.error(error)); // Сработает, если нас послали нахуй

Важный момент, который все тупят: resolve и reject принимают только один аргумент. Хочешь передать кучу данных — засунь их в объект или массив, а то будешь выглядеть как манда с ушами.

И да, обработку ошибок всегда лучше делать через .catch() в конце цепочки. Это как страховочная сетка, чтобы не разбиться в лепёшку, если какой-то промежуточный .then() вдруг выбросит тебя с балкона. Волнение ебать, но терпения ноль — разобраться стоит.