Во-первых, это четвертая статья из этой серии. Поэтому я предполагаю, что вы уже читали предыдущие статьи:

Теперь пришло время изучить некоторые методы Promises, которые могут сильно помочь в организации нашего кода и повышении производительности.

Контекст

Представьте, что нам нужно получить два URL-адреса, поэтому мы делаем следующее:

const houses = await axios.get('https://wizard-world-api.herokuapp.com/Houses')
const spells = await axios.get('https://wizard-world-api.herokuapp.com/Spells')

Итак, здесь мы получаем первый API, а когда он готов, мы получаем второй. Я сделал несколько тестов здесь, и выполнение занимает 2–3 секунды.

Но лучше ли это сделать? В этой ситуации мы могли бы выполнить оба одновременно, асинхронно, и когда оба будут готовы, мы могли бы продолжить наш код.

Ну, есть способ сделать это.

Promise.all метод

Метод Promise.all делает именно это! Он запускает все обещания и, когда все они разрешены, возвращается.

Он получает массив промисов и возвращает массив разрешенных значений.

const [houses, spells] = await Promise.all([
    axios.get('https://wizard-world-api.herokuapp.com/Houses'),
    axios.get('https://wizard-world-api.herokuapp.com/Spells')
])

Теперь это выполнение занимает 1–2 секунды. Это происходит потому, что обе выборки выполняются одновременно. Таким образом, нет необходимости ждать одного финиша, чтобы начать другой.

Однако, если одно обещание отклонено, весь метод Promise.all также будет отклонен и немедленно вернется.

Если вы хотите, чтобы метод продолжил работу и возвращал все разрешенные и отклоненные, вы должны использовать Promise.allSettled. Он вернет массив для каждого промиса, разрешенного или отклоненного.

Другие методы обещания

Есть и другие методы Promise, например Promise.race . Как следует из названия, он получает массив промисов и возвращает первый промис для разрешения или отклонения.

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

Итак, на данный момент это все. Надеюсь, поможет.

Ваше здоровье!