Проміси в JavaScript та методи promise
Проміс
Promise — це функція-конструктор, яка використовується для створення промісів у JavaScript. Promise — це об'єкт, який дозволяє працювати з асинхронними операціями та виконувати їх без блокування основного потоку виконання.
Promise може бути в одному з наступних станів:
- Pending — початковий стан, коли асинхронна операція ще не завершена.
- Fulfilled — коли асинхронна операція успішно завершена.
- Rejected — коли асинхронна операція завершена з помилкою.
Приклад створення промісу
let promise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("Операція успішно завершена!"); // Успішне виконання
} else {
reject("Сталася помилка!"); // Помилка
}
});Методи промісів
Promise.all
Promise.all() використовується для виконання кількох промісів паралельно та повертає новий проміс, який виконується, коли всі проміси в масиві успішно завершаться. Якщо хоча б один проміс відхилено, результат буде відхилено з помилкою цього промісу.
Синтаксис Promise.all
Promise.all([promise1, promise2, ...])
.then((results) => { console.log(results); })
.catch((error) => { console.log(error); });Приклад Promise.all
let promise1 = new Promise((resolve) => setTimeout(resolve, 1000, "Перший"));
let promise2 = new Promise((resolve) => setTimeout(resolve, 2000, "Другий"));
Promise.all([promise1, promise2])
.then((results) => {
console.log(results); // ["Перший", "Другий"]
})
.catch((error) => {
console.log(error); // Якщо один проміс відхилено, помилка буде виведена
});Promise.race
Promise.race() приймає масив промісів і повертає новий проміс, який завершується, як тільки перший проміс в масиві завершується (незалежно від того, чи був він виконаний або відхилений).
Синтаксис Promise.race
Promise.race([promise1, promise2, ...])
.then((value) => { console.log(value); })
.catch((error) => { console.log(error); });Приклад Promise.race
let promise1 = new Promise((resolve) => setTimeout(resolve, 1000, "Перший"));
let promise2 = new Promise((resolve) => setTimeout(resolve, 2000, "Другий"));
Promise.race([promise1, promise2])
.then((value) => {
console.log(value); // "Перший", тому що він завершився першим
});Promise.allSettled
Promise.allSettled() виконує всі проміси в масиві та повертає результат для кожного, незалежно від того, чи були вони виконані або відхилені.
Синтаксис Promise.allSettled
Promise.allSettled([promise1, promise2, ...])
.then((results) => { console.log(results); });Приклад Promise.allSettled
let promise1 = Promise.resolve("Перший");
let promise2 = Promise.reject("Помилка в другому");
Promise.allSettled([promise1, promise2])
.then((results) => {
console.log(results);
// [{ status: "fulfilled", value: "Перший" }, { status: "rejected", reason: "Помилка в другому" }]
});Promise.any
Promise.any() повертає новий проміс, який виконується, як тільки перший проміс в масиві успішно виконується. Якщо всі проміси відхилені, він відхиляється з помилкою.
Синтаксис Promise.any
Promise.any([promise1, promise2, ...])
.then((value) => { console.log(value); })
.catch((error) => { console.log(error); });Приклад Promise.any
let promise1 = new Promise((resolve, reject) => setTimeout(reject, 1000, "Помилка 1"));
let promise2 = new Promise((resolve) => setTimeout(resolve, 2000, "Успіх"));
Promise.any([promise1, promise2])
.then((value) => {
console.log(value); // "Успіх", тому що другий проміс успішно завершився першим
})
.catch((error) => {
console.log(error); // Якщо всі проміси відхилені, помилка буде виведена
});Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.