Какие виды Promise ты знаешь?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Основные виды промисов в Node.js:
-
Basic Promise: Представляет собой контейнер для будущих значений или ошибок. Имеет три состояния:
pending(ожидание),fulfilled(выполнено успешно),rejected(отклонено с ошибкой). Создается с помощью конструктораnew Promise().// Создание базового промиса const myPromise = new Promise((resolve, reject) => { // Асинхронная операция setTimeout(() => { const success = true; if (success) { resolve("Операция успешно завершена"); } else { reject("Произошла ошибка"); } }, 1000); }); -
Promise.resolve(): Создает промис, который немедленно переходит в состояние
fulfilledс заданным значением.// Создание resolved промиса const resolvedPromise = Promise.resolve("Это уже выполненный промис"); -
Promise.reject(): Создает промис, который немедленно переходит в состояние
rejectedс заданной причиной ошибки.// Создание rejected промиса const rejectedPromise = Promise.reject(new Error("Это отклоненный промис")); -
Promise.all(): Принимает массив промисов и возвращает новый промис. Этот новый промис переходит в состояние
fulfilled, когда все промисы в массиве успешно завершены. Значением будут массивы результатов в том же порядке, что и входные промисы. Если любой из промисов в массиве отклоняется,Promise.all()немедленно отклоняется с причиной первого отклоненного промиса.// Использование Promise.all() const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100)); Promise.all([promise1, promise2, promise3]) .then((values) => { // values будет [1, 2, 3] }) .catch((error) => { // Обработка ошибок }); -
Promise.allSettled(): Принимает массив промисов и возвращает новый промис. Этот новый промис переходит в состояние
fulfilled, когда все промисы в массиве либо успешно завершены (fulfilled), либо отклонены (rejected). Значением будет массив объектов, описывающих результат каждого промиса (состояние и значение/причина). В отличие отPromise.all(), немедленно не отклоняется.// Использование Promise.allSettled() const promiseA = Promise.resolve("успех"); const promiseB = Promise.reject("ошибка"); Promise.allSettled([promiseA, promiseB]) .then((results) => { // results будет массивом объектов: // [{status: 'fulfilled', value: 'успех'}, {status: 'rejected', reason: 'ошибка'}] }); -
Promise.race(): Принимает массив промисов и возвращает новый промис. Этот новый промис переходит в состояние
fulfilledилиrejectedс результатом/причиной первого промиса из массива, который либо успешно завершился, либо отклонился.// Использование Promise.race() const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Я быстрый!"), 50)); const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Я медленный..."), 500)); Promise.race([promiseFast, promiseSlow]) .then((value) => { // value будет "Я быстрый!" }); -
Promise.any(): Принимает массив промисов и возвращает новый промис. Этот новый промис переходит в состояние
fulfilledс значением первого промиса из массива, который успешно завершился. Если все промисы в массиве отклоняются,Promise.any()возвращает ошибкуAggregateError, содержащую причины всех отклоненных промисов. Доступен начиная с Node.js 12.// Использование Promise.any() const promiseFail1 = Promise.reject("Ошибка 1"); const promiseSuccess = Promise.resolve("Успех!"); const promiseFail2 = Promise.reject("Ошибка 2"); Promise.any([promiseFail1, promiseSuccess, promiseFail2]) .then((value) => { // value будет "Успех!" }) .catch((error) => { // Обработка AggregateError, если все промисы отклонены });