F
FrontEnd_Xpert
@frontend_xpert22 подп.
454просмотров
15 декабря 2024 г.
Score: 499
💟 Promise API В классе Promise есть 4 статических методов для управления несколькими промисами: 🔮 Promise.all Допустим, нам нужно запустить множество промисов параллельно и дождаться, пока все они выполнятся. Для этого как раз и пригодится Promise.all. Метод Promise.all принимает массив промисов (может принимать любой перебираемый объект, но обычно используется массив) и возвращает новый промис. Новый промис завершится, когда завершится весь переданный список промисов, и его результатом будет массив их результатов. Promise.all([ new Promise(resolve => setTimeout(() => resolve(1), 3000)), // 1 new Promise(resolve => setTimeout(() => resolve(2), 2000)), // 2 new Promise(resolve => setTimeout(() => resolve(3), 1000)) // 3 ]).then(console.log); // когда все промисы выполнятся, результат будет 1,2,3 // каждый промис даёт элемент массива // порядок элементов массива в точности соответствует порядку исходных промисов Если любой из промисов завершится с ошибкой, то промис, возвращённый Promise.all, немедленно завершается с этой ошибкой. Promise.all([ new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)), new Promise((resolve, reject) => setTimeout(() => reject(("Ошибка!")), 2000)), new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000)) ]).catch(console.log); // Ошибка! Если один промис завершается с ошибкой, то весь Promise.all завершается с ней, полностью забывая про остальные промисы в списке. Их результаты игнорируются. 🔮 Promise.allSettled Метод Promise.allSettled всегда ждёт завершения всех промисов. В массиве результатов будет {status:"fulfilled", value:результат} для успешных завершений, {status:"rejected", reason:ошибка} для ошибок. Пример: Promise.allSettled([ new Promise((resolve, reject) => { setTimeout(()=>resolve('1'), 1000); }), new Promise((resolve, reject) => { setTimeout(()=>resolve('2'), 2000); }), new Promise((resolve, reject) => { setTimeout(()=>reject('Error'), 1000); }), new Promise((resolve, reject) => { setTimeout(()=>resolve('3'), 3000); }), new Promise((resolve, reject) => { setTimeout(()=>resolve('4'), 500); }), ]).then(result => console.log(result)) Получим: [ { status: 'fulfilled', value: '1' }, { status: 'fulfilled', value: '2' }, { status: 'rejected', reason: 'Error' }, { status: 'fulfilled', value: '3' }, { status: 'fulfilled', value: '4' } ] 🔮 Promise.any Promise.any используется, чтобы дождаться успешного выполнения первого промиса из массива. Игнорирует промисы, которые отклоняются, и возвращает перый успешный результат. Promise.any([ new Promise((resolve, reject) => { setTimeout(() => resolve('1'), 1000); }), new Promise((resolve, reject) => { setTimeout(() => resolve('2'), 2000); }), new Promise((resolve, reject) => { setTimeout(() => reject('Error'), 500); })]).then(result => console.log(result);) // Выводит '1' через 1с, так как это первый успешно выполненный промис Зачем нужно: Это полезно, когда вам нужно получить первый успешный результат из группы асинхронных операций, игнорируя все ошибки. 🔮 Promise.race Promise.race возвращает промис, который завершится, как только один из входящих промисов выполнится или отклонится. Он возвращает результат первого завершённого промиса, независимо от его состояния (успех или ошибка). Promise.race([ new Promise((resolve, reject) => { setTimeout(() => resolve('1'), 1000); }), new Promise((resolve, reject) => { setTimeout(() => resolve('2'), 2000); }), new Promise((resolve, reject) => { setTimeout(() => reject('Error'), 1000); })]).then(result => console.log(result);) // Выводит '1' через 1с, так как это первый завершённый промис Зачем нужно: Это полезно для сценариев, когда необходимо реагировать на первое завершение операции, будь то успешное выполнение или ошибка. #javascript #angula
454
просмотров
4000
символов
Нет
эмодзи
Нет
медиа

Другие посты @frontend_xpert

Все посты канала →
💟 Promise API В классе Promise есть 4 статических методов д — @frontend_xpert | PostSniper