Освоение Promise allSettled в TypeScript: подробное руководство

Асинхронное программирование — фундаментальный аспект современной веб-разработки, и обещания играют решающую роль в управлении асинхронными операциями. JavaScript предоставляет несколько методов для одновременной обработки нескольких промисов, один из которых — Promise.allSettled(). В этой статье мы рассмотрим тонкости Promise.allSettled()и узнаем, как использовать его возможности в TypeScript.

Понимание Promise.allSettled():
Метод Promise.allSettled()принимает массив обещаний и возвращает новое обещание, которое разрешается, когда все обещания во входном массиве выполнены (выполнены или отклонены). ). В отличие от Promise.all(), который выполняет короткое замыкание и отклоняет немедленно при обнаружении первого отклоненного обещания, Promise.allSettled()ждет, пока все обещания будут урегулированы, прежде чем разрешить. Это делает его идеальным для сценариев, в которых вам необходимо обрабатывать результаты всех обещаний, независимо от того, успешны они или нет.

Примеры кода.
Давайте рассмотрим несколько примеров кода, чтобы продемонстрировать использование Promise.allSettled()в TypeScript.

  1. Базовое использование:

    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
  2. Фильтрация выполненных и отклоненных обещаний:

    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 }]
  3. Объединение с 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 для повышения безопасности и удобства сопровождения ваших обещаний. Приятного кодирования!