Асинхронное программирование — фундаментальный аспект современной веб-разработки, и обещания играют решающую роль в управлении асинхронными операциями. JavaScript предоставляет несколько методов для одновременной обработки нескольких промисов, один из которых — Promise.allSettled(). В этой статье мы рассмотрим тонкости Promise.allSettled()и узнаем, как использовать его возможности в TypeScript.
Понимание Promise.allSettled():
Метод Promise.allSettled()принимает массив обещаний и возвращает новое обещание, которое разрешается, когда все обещания во входном массиве выполнены (выполнены или отклонены). ). В отличие от Promise.all(), который выполняет короткое замыкание и отклоняет немедленно при обнаружении первого отклоненного обещания, Promise.allSettled()ждет, пока все обещания будут урегулированы, прежде чем разрешить. Это делает его идеальным для сценариев, в которых вам необходимо обрабатывать результаты всех обещаний, независимо от того, успешны они или нет.
Примеры кода.
Давайте рассмотрим несколько примеров кода, чтобы продемонстрировать использование Promise.allSettled()в TypeScript.
-
Базовое использование:
const promises = [ Promise.resolve('Success'), Promise.reject(new Error('Failure')), Promise.resolve('Another Success') ]; Promise.allSettled(promises) .then(results => results.forEach(result => console.log(result.status, result.value))) .catch(error => console.error(error));Выход:
fulfilled Success rejected Error: Failure fulfilled Another Success -
Фильтрация выполненных и отклоненных обещаний:
Promise.allSettled(promises) .then(results => { const fulfilled = results.filter(result => result.status === 'fulfilled'); const rejected = results.filter(result => result.status === 'rejected'); console.log('Fulfilled:', fulfilled); console.log('Rejected:', rejected); }) .catch(error => console.error(error));Выход:
Fulfilled: [{ status: "fulfilled", value: "Success" }, { status: "fulfilled", value: "Another Success" }] Rejected: [{ status: "rejected", reason: Error: Failure }] -
Объединение с Promise.all():
const promises2 = [ Promise.resolve('Success'), Promise.reject(new Error('Failure')), Promise.resolve('Another Success') ]; Promise.all([ Promise.allSettled(promises), Promise.allSettled(promises2) ]) .then(results => console.log(results)) .catch(error => console.error(error));Выход:
[ [ { status: "fulfilled", value: "Success" }, { status: "rejected", reason: Error: Failure }, { status: "fulfilled", value: "Another Success" } ], [ { status: "fulfilled", value: "Success" }, { status: "rejected", reason: Error: Failure }, { status: "fulfilled", value: "Another Success" } ] ]
Освоив Promise.allSettled()в TypeScript, вы получите мощный инструмент для обработки нескольких обещаний и гарантированного фиксации результата каждого обещания, независимо от того, было оно успешным или нет. Возможность фильтровать и комбинировать результаты открывает возможности для расширенной обработки ошибок и параллельного выполнения. Включение Promise.allSettled()в ваши асинхронные рабочие процессы повысит надежность вашего кода.
Не забывайте использовать аннотации типов TypeScript для повышения безопасности и удобства сопровождения ваших обещаний. Приятного кодирования!