Какие знаешь статичные методы у Promise
1️⃣ Как кратко ответить
Promise имеет несколько статичных методов: Promise.all(), Promise.allSettled(), Promise.race(), Promise.any(), и Promise.resolve()/Promise.reject(). Эти методы позволяют работать с несколькими промисами одновременно, управлять их выполнением и обрабатывать результаты.
2️⃣ Подробное объяснение темы
В JavaScript Promise — это объект, представляющий результат асинхронной операции. Статичные методы Promise позволяют работать с несколькими промисами одновременно, что упрощает управление асинхронными задачами. Рассмотрим каждый из них:
-
Promise.all(iterable)Этот метод принимает итерируемый объект (например, массив) промисов и возвращает новый промис. Он выполняется, когда все промисы в итерируемом объекте выполнены успешно, или отклоняется, если хотя бы один из промисов отклоняется.
const promise1 = Promise.resolve(3); const promise2 = 42; const promise3 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'foo'); }); Promise.all([promise1, promise2, promise3]).then((values) => { console.log(values); // [3, 42, "foo"] });promise1иpromise3— это промисы, которые будут выполнены.promise2— это обычное значение, которое будет обработано как выполненный промис.Promise.allвозвращает промис, который выполнится, когда все промисы в массиве будут выполнены, и вернет массив их значений.
-
Promise.allSettled(iterable)Этот метод также принимает итерируемый объект промисов и возвращает промис, который выполняется, когда все промисы в итерируемом объекте завершены (выполнены или отклонены). Он возвращает массив объектов, каждый из которых описывает результат каждого промиса.
const promise1 = Promise.resolve(3); const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'error')); Promise.allSettled([promise1, promise2]).then((results) => { results.forEach((result) => console.log(result.status)); }); // Output: // "fulfilled" // "rejected"Promise.allSettledвозвращает промис, который выполнится, когда все промисы завершатся, независимо от их состояния.- Каждый элемент в возвращаемом массиве содержит объект с
statusиvalueилиreasonв зависимости от результата промиса.
-
Promise.race(iterable)Этот метод принимает итерируемый объект промисов и возвращает промис, который выполняется или отклоняется, как только любой из промисов в итерируемом объекте выполнится или отклонится.
const promise1 = new Promise((resolve, reject) => { setTimeout(resolve, 500, 'one'); }); const promise2 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'two'); }); Promise.race([promise1, promise2]).then((value) => { console.log(value); // "two" });Promise.raceвозвращает промис, который выполнится или отклонится в зависимости от того, какой из промисов завершится первым.- В данном примере
promise2завершается первым, поэтому возвращается его значение.
-
Promise.any(iterable)Этот метод принимает итерируемый объект промисов и возвращает промис, который выполняется, как только любой из промисов выполнится успешно. Если все промисы отклоняются, возвращаемый промис отклоняется с
AggregateError.const promise1 = Promise.reject('error1'); const promise2 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'success'); }); Promise.any([promise1, promise2]).then((value) => { console.log(value); // "success" }).catch((error) => { console.log(error); });Promise.anyвозвращает промис, который выполнится, как только любой из промисов выполнится успешно.- Если все промисы отклоняются, возвращается
AggregateError, содержащий все причины отклонения.
-
Promise.resolve(value)иPromise.reject(reason)Эти методы возвращают промис, который выполнен с переданным значением или отклонен с переданной причиной соответственно.
const resolvedPromise = Promise.resolve(42); resolvedPromise.then((value) => { console.log(value); // 42 }); const rejectedPromise = Promise.reject('error'); rejectedPromise.catch((reason) => { console.log(reason); // "error" });Promise.resolveсоздает промис, который сразу же выполняется с переданным значением.Promise.rejectсоздает промис, который сразу же отклоняется с переданной причиной.
Эти статичные методы Promise позволяют эффективно управлять асинхронными операциями, обеспечивая гибкость и контроль над выполнением и обработкой результатов нескольких промисов.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться