Объясните Promise.allSettled() с асинхронным ожиданием в JavaScript
В этой статье мы попытаемся понять, как мы можем реализовать метод Promise.allSettled() с асинхронным ожиданием в JavaScript с помощью определенных примеров кода, а также теоретических объяснений. Давайте сначала быстро разберемся с методом Promise.allSettled(). Этот метод является одним из наиболее распространенных методов, доступных в объекте Promise, который выполняется, когда все промисы либо успешно разрешены, либо отклонены. Результатом этого метода будет массив из нескольких объектов (в зависимости от количества промисов, созданных пользователем), содержащий значение и статус каждого промиса в каждом объекте. Лучше использовать Promise.all(), если задачи зависят друг от друга или если мы хотим отклонить конкретное обещание в любой момент.
Синтаксис:
При реализации метода Promise.allSettled() предпочтительнее использовать следующий синтаксис:
Promise.allSettled([first_promise, second_promise, ...]).then( // do something... )
Теперь, проанализировав приведенный выше синтаксис, мы увидим следующий пример, который поможет нам понять приведенный выше синтаксис гораздо лучше и эффективнее:
Пример 1: В этом примере мы будем создавать три обещания одно за другим. Каждое обещание будет содержать другую функцию таймера с разными тайм-аутами. После этого мы будем использовать метод Promise.allSettled(), который примет все три промиса в качестве входных данных в виде массива (или итерируемого объекта) и выполнит результат в соответствии со своей ролью.
Javascript
let first_promise = new Promise((resolve, reject) => { setTimeout(() => { resolve( "GeeksforGeeks...!!" ); }, 1000); }); let second_promise = new Promise((resolve, reject) => { setTimeout(() => { resolve( "JavaScript......!!" ); }, 2000); }); let third_promise = new Promise((resolve, reject) => { setTimeout(() => { resolve( "TypeScript...!!" ); }, 3000); }); let promise_array = [first_promise, second_promise, third_promise]; Promise.allSettled(promise_array).then((result) => console.log(result)); |
Выход:
[ { status: "fulfilled", value: "GeeksforGeeks...!!" }, { status: "fulfilled", value: "JavaScript......!!" }, { status: "fulfilled", value: "TypeScript...!!" } ]
Теперь мы увидели, как реализовать метод Promise.allSettled(), давайте посмотрим, как реализовать этот метод с помощью ключевых слов async-await.
Пример 2. В этом примере мы будем создавать три обещания одно за другим (как мы делали в предыдущем примере). Каждое обещание будет содержать другую функцию таймера с разными тайм-аутами. Затем мы создадим функцию с ключевым словом async с префиксом, и внутри нее мы перехватим или сохраним наш результат, используя ключевое слово await . После этого мы будем использовать метод Promise.allSettled(), который примет все три промиса в качестве входных данных в виде массива (или итерируемого объекта) и выполнит результат в соответствии со своей ролью.
Javascript
let first_promise = new Promise((resolve, reject) => { setTimeout(() => { resolve( "GeeksforGeeks...!!" ); }, 1000); }); let second_promise = new Promise((resolve, reject) => { setTimeout(() => { resolve( "JavaScript......!!" ); }, 2000); }); let third_promise = new Promise((resolve, reject) => { setTimeout(() => { resolve( "TypeScript...!!" ); }, 3000); }); async function displayResult() { let promise_array = [first_promise, second_promise, third_promise]; let result = await promise_array; Promise.allSettled(promise_array).then((result) => console.log(result)); } displayResult(); |
Выход:
[ { status: "fulfilled", value: "GeeksforGeeks...!!" }, { status: "fulfilled", value: "JavaScript......!!" }, { status: "fulfilled", value: "TypeScript...!!" } ]