Что такое обещания и в чем разница между Promise.all, Promise.allSettled, Promise.race и Promise.any?

Введение

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

Обратный вызов: обратный вызов - это функция, которая передается в другую функцию в качестве аргумента, который будет выполнен позже.

События: события обеспечивают динамический интерфейс для веб-страницы и связаны с элементами объектной модели документа (DOM), например: onclick (), onmouseover () и т. д.

Обещание имеет четыре состояния

В ожидании: до того, как событие произошло, обещание находится в состоянии ожидания.

Установлено: после того, как событие произошло, оно переходит в установленное состояние.

Выполнено: действие, связанное с обещанием, выполнено.

Отклонено: действие, связанное с обещанием, не выполнено.

Пример успешного выполнения обещания:

Пример отклоненного обещания:

Сравнительная таблица

Promise.all ()

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

// Syntax
Promise.all( iterable )

Пример 1a. Пример Promise.All () со всеми решенными обещаниями:

Пример 1b. Пример Promise.All () с одним отклоненным обещанием:

Promise.allSettled ()

ES2020 представил метод Promise.allSettled (), который принимает массив обещаний. Он возвращает новое обещание, которое разрешится, если все обещания в массиве будут урегулированы, независимо от того, разрешены они или отклонены. После разрешения он возвращает массив объектов, в котором каждый объект имеет свойство status независимо от того, было ли обещание выполнено или отклонено, и значение, которое возвращается, когда обещание разрешено или отклонено.

Пример 2a. Пример Promise.allSettled () со всеми выполненными обещаниями:

Пример 2b. Пример Promise.allSettled () с одним отклоненным обещанием:

Promise.race ()

Подобно вышеупомянутым методам (Promise.any () и P romise.allSettled ()), этому методу передается массив, который возвращает результат (параметр функции разрешения) самого быстрого обещания (разрешенного или отклоненного).

Пример 3a. Пример обещаний, переданных в Promise.race () с другим setTimeout:

Пример 3b. Пример Promise.race (), в котором обещание с наименьшим временем ожидания отклоняется:

Promise.any ()

ES2021 представит метод Promise.any (), который выполняет короткое замыкание и возвращает значение, как только оно достигает первого разрешенного обещания из списка / массива обещаний (как объяснено в примере 4a. ). Если все обещания отклонены, будет выдана агрегированная ошибка (как показано в примере 4b).

Он отличается от Promise.race () тем, что в этом методе происходит короткое замыкание, когда одно из заданных обещаний либо разрешается, либо отклоняется.

Пример 4a. Даже если обещание отклонено, Promise.any () вернул первое выполненное обещание:

Пример 4b: пример, когда все обещания отклоняются, AggregateError выдается:

Вывод

Надеюсь, эта статья помогла вам получить четкое представление о том, как эти методы работают в JavaScript. Не стесняйтесь запускать примеры, чтобы понять, как и где использовать эти методы. Спасибо за чтение!