Какво е Promise?

Какво е Promise?
Photo by AbsolutVision / Unsplash

Promise е обект в JavaScript, който се използва за обработка на асинхронни операции. Той представлява асинхронен процес, който може да завърши успешно или да бъде отхвърлен, като дава възможност за обработка на резултата в бъдещ момент.

Promise има три състояния:

  • pending (очакване) - началното състояние, когато Promise е създаден, но не е завършен
  • fulfilled (изпълнен) - състояние, когато Promise е успешно завършен и резултатът е наличен
  • rejected (отхвърлен) - състояние, когато Promise е завършен с грешка или неуспешно и резултатът не е наличен

Promise има два метода, които позволяват на приложението да се абонира за резултата - .then() и .catch(). Методът .then() се изпълнява, когато Promise е успешно изпълнен, докато методът .catch() се изпълнява, когато Promise е отхвърлен.

Пример за използване на Promise:

const myPromise = new Promise((resolve, reject) => {
  // асинхронен процес
  setTimeout(() => {
    const randomNumber = Math.random();
    if (randomNumber > 0.5) {
      resolve(randomNumber);
    } else {
      reject('Number is too small');
    }
  }, 1000);
});

myPromise
  .then((result) => {
    console.log(`Number is ${result}`);
  })
  .catch((error) => {
    console.error(error);
  });

В този пример, създаваме нов Promise, който изпълнява асинхронен процес (изчаква 1 секунда и генерира произволно число). Ако числото е по-голямо от 0.5, Promise се изпълнява успешно и се извежда в конзолата, в противен случай Promise е отхвърлен и се извежда грешката.

Пример за използване на Promise с функцията fetch(), която се използва за заявки към API-та:

fetch('https://example.com/1')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

В този пример функцията fetch() прави заявка към API-то на https://example.com/1 и връща Promise обект.

След това с метода then() на Promise обекта, който приема callback функция като параметър, се обработва отговора на заявката като той се превръща от JSON формат към обект на JavaScript с помощта на метода json() - преобразува формата на данните от JSON към обект на JavaScript отнема малко време, затова е необходимо да се използва Promise обекта, за да се изчака завършването на тази операция.
След това се извършва следващата операция, която в този пример просто отпечатва обекта в конзолата с метода console.log(). В случай на грешка при заявката, Promise обекта се обработва с метода catch(), който приема callback функция за обработка на грешката.