Какво е Promise?
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 функция за обработка на грешката.