Введение.
В предыдущем обсуждении мы рассмотрели основы промисов JavaScript и их использование. Однако промисы предлагают больше, чем просто последовательное выполнение и обработку ошибок. В этой статье мы рассмотрим расширенные методы обработки обещаний, включая Promise.all, Promise.allSettled, Promise.race и другие. Понимание этих продвинутых методов промисов позволит вам легко справляться со сложными асинхронными сценариями. Итак, давайте повысим уровень нашей игры с обещаниями и раскроем весь потенциал JavaScript!

## Содержание:
1. Promise.all: обработка нескольких промисов
2. Promise.allSettled: обработка нескольких промисов с установленными состояниями
3. Promise.race: разрешение с самым быстрым промисом
4. Promise.any: разрешение с первым выполненным обещанием
5. Promise.resolve и Promise.reject
6. Заключение

## 1. Promise.all: обработка нескольких промисов
Метод Promise.all позволяет обрабатывать несколько промисов одновременно и ждать, пока все они будут разрешены или отклонены. Он принимает итерируемый (например, массив) обещаний в качестве входных данных и возвращает новое обещание, которое выполняется с массивом разрешенных значений, когда все обещания успешно разрешены. Если какое-либо обещание отклонено, обещание Promise.all будет отклонено с указанием причины первого отклоненного обещания.

const promise1 = fetch(‘https://api.example.com/data1');
const promise2 = fetch(‘https://api.example.com/data2');
const promise3 = fetch(‘https://api.example.com/data3');

Promise.all([promise1, promise2, promise3])
 .then(results => {
 // Handle the resolved values
 console.log(results);
 })
 .catch(error => {
 // Handle the first rejection reason
 console.error(error);
 });

## 2. Promise.allSettled:

Обработка нескольких обещаний с установленными состояниями
В отличие от `Promise.all`, метод `Promise.allSettled` позволяет вам обрабатывать несколько обещаний и ждать, пока все они будут выполнены (разрешены или отклонены), независимо от их результата. Он возвращает новое обещание, которое выполняется с массивом объектов, каждый из которых содержит результат соответствующего обещания.

const promise1 = fetch(‘https://api.example.com/data1');
const promise2 = fetch(‘https://api.example.com/data2');
const promise3 = fetch(‘https://api.example.com/data3');

Promise.allSettled([promise1, promise2, promise3])
 .then(results => {
 results.forEach(result => {
 if (result.status === ‘fulfilled’) {
 console.log(result.value); // Handle resolved value
 } else if (result.status === ‘rejected’) {
 console.error(result.reason); // Handle rejection reason
 }
 });
 });

## 3. Promise.race:

Разрешение с помощью самого быстрого промиса
Метод Promise.race позволяет обрабатывать несколько промисов, но разрешает или отклоняет, как только первый промис улаживается (разрешается или отклоняется). Он возвращает новое обещание, которое соответствует результату самого быстрого обещания.

const promise1 = new Promise(resolve => setTimeout(resolve, 2000, ‘Promise 1’));
const promise2 = new Promise(resolve => setTimeout(resolve, 1000, ‘Promise 2’));

Promise.race([promise1, promise2])
 .then(result => {
 console.log(result); // Output: Promise 2
 })
 .catch(error => {
 console.error(error);
 });

## 4. Promise.any:

Разрешение с первым выполненным обещанием
Метод `Promise.any` позволяет обрабатывать несколько обещаний и разрешается, как только любое из обещаний выполняется. Он возвращает новое обещание, которое разрешается со значением первого выполненного обещания. Если все промисы отклонены, они будут отклонены с `AggregateError`, содержащим причины отклонения.

const promise1 = new Promise((resolve, reject) => setTimeout(reject, 2000, ‘Promise 1 rejected’));
const promise2 = new Promise(resolve => setTimeout(resolve, 1000, ‘Promise 2’));

Promise.any([promise1, promise2])
 .then(result => {
 console.log(result); // Output: Promise 2
 })
 .catch(errors => {
 console.error(errors); // Output: AggregateError: All promises were rejected
 });
```

## 5. Promise.resolve и Promise.reject
Метод `Promise.resolve` возвращает разрешенное обещание с указанным значением. Его можно использовать для преобразования значения, не являющегося обещанием, в обещание, что делает его полезным для согласованности и обработки синхронного кода.

Promise.resolve(‘Success’)
 .then(result => {
 console.log(result); // Output: Success
 });

Promise.reject(new Error(‘Failed’))
 .catch(error => {
 console.error(error); // Output: Error: Failed
 });
```

## Заключение
Обещания JavaScript предлагают ряд расширенных методов для обработки сложных асинхронных сценариев. Используя `Promise.all`, `Promise.allSettled`, `Promise.race`, `Promise.any`, `Promise.resolve` и `Promise.reject`, вы можете эффективно управлять несколькими обещаниями, обрабатывать различные состояния урегулирования , и разрешить с самым быстрым или первым выполненным обещанием. Эти методы повышают гибкость и мощь промисов, позволяя создавать надежный и эффективный асинхронный код.

Не забывайте использовать эти передовые методы обработки обещаний, когда сталкиваетесь со сложными асинхронными задачами. Удачного кодирования!

Подпишитесь на эту учетную запись, чтобы узнать о предстоящем параллелизме и масштабировании с помощью Promises в статье javascript с реальными рабочими примерами.

Часть 01: https://medium.com/@vikramgyawali57/demystifying-javascript-promises-unlocking-asynchronous-power-9084818b7d05

*Ссылки:
- Веб-документы MDN: [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)
- Веб-документы MDN: [Promise.allSettled](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled)
— MDN Web Документы: [Promise.race](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race)
— Веб-документы MDN: [Promise. любой](https://developer.mozilla.org/en-US/docs