Поиск по сайту
Ctrl + K
Вопросы по TS

Что такое "Promise" в TypeScript?

"Promise" (обещание) в TypeScript и JavaScript - это объект, который представляет собой значение, которое может быть доступно сейчас, в будущем или никогда. Он используется для работы с асинхронным кодом и позволяет обрабатывать результат выполнения асинхронных операций более структурированно и удобно.

Основные состояния Promise

Promise может находиться в одном из трех состояний:

  • Ожидание (Pending): начальное состояние, не выполнено и не отклонено.
  • Выполнено (Fulfilled): операция завершена успешно.
  • Отклонено (Rejected): операция завершена с ошибкой.
  • Как создать Promise

    Синтаксис создания Promise выглядит следующим образом:

    let myPromise = new Promise((resolve, reject) => {
        // Асинхронная операция
        const operationSuccessful = true; // Замените это на вашу логику
    
        if (operationSuccessful) {
            resolve("Успешно выполнено!"); // Значение, с которым мы решаем промис
        } else {
            reject("Ошибка во время выполнения!"); // Причина, по которой мы отклоняем промис
        }
    });
    

    Обработка Promise

    Для обработки результата выполнения Promise используются методы .then() и .catch().

    myPromise
        .then(result => {
            console.log(result); // Вывод: "Успешно выполнено!"
        })
        .catch(error => {
            console.error(error); // Если что-то пошло не так
        });
    

    Пример использования Promise

    Давайте рассмотрим пример, в котором мы создадим Promise, имитирующий получение данных из API с задержкой.

    function fetchData(): Promise<string> {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                const dataFetchedSuccessfully = true;
    
                if (dataFetchedSuccessfully) {
                    resolve("Данные успешно получены!");
                } else {
                    reject("Не удалось получить данные.");
                }
            }, 2000); // Имитируем задержку в 2 секунды
        });
    }
    
    fetchData()
        .then(data => {
            console.log(data); // Вывод данных, если Promise выполнен успешно
        })
        .catch(error => {
            console.error(error); // Обработка ошибки, если Promise отклонен
        });
    

    Использование async/await

    TypeScript также поддерживает синтаксис async/await, который позволяет работать с промисами более лаконично:

    async function getData() {
        try {
            const data = await fetchData();
            console.log(data); // Вывод: "Данные успешно получены!"
        } catch (error) {
            console.error(error); // Обработка ошибок
        }
    }
    
    getData();
    

    Заключение

    Promise - это мощный инструмент для работы с асинхронным кодом в TypeScript. Использование Promise в сочетании с async/await позволяет писать чистый и понятный код, который легко поддерживать. Понимание этой концепции является важным шагом в освоении фронтенд-разработки.