Промисы (Promise) — это способ работы с асинхронными операциями в программировании.
Асинхронные операции — это такие действия, которые занимают некоторое время для выполнения и не блокируют выполнение других частей программы, пока они выполняются. Примерами асинхронных операций могут быть загрузка данных с сервера, чтение файла с диска или выполнение длительной задачи в фоновом режиме.
Промисы представляют собой объекты, которые предоставляют информацию о состоянии асинхронной операции и позволяют задать функции, которые будут вызваны после завершения (или возникновения ошибки) этой операции. Промисы делают работу с асинхронными операциями более структурированной и удобной.
Пример ситуации, где могут быть использованы промисы:
Представьте, что вы заказываете пиццу в ресторане. Официант принимает ваш заказ и идет на кухню. Вам не нужно ждать у стола, пока пицца готовится — вы можете выпить что-то или пообщаться с друзьями. Когда пицца будет готова, официант вернется и принесет ее вам.
В этом случае, заказ пиццы — это асинхронная операция. Вы продолжаете заниматься другими делами, пока ожидаете ее завершения. Промис — это аналог официанта, который сообщает вам о результате операции (приготовление пиццы) и предоставляет возможность реагировать на это.
Пример использования промиса в коде на JavaScript:
// Функция, которая возвращает промис, имитирующий загрузку данных с сервера function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Данные успешно загружены"); }, 2000); }); } // Использование промиса для обработки загруженных данных fetchData().then((data) => { console.log(data); // Выводит "Данные успешно загружены" через 2 секунды });
В этом примере функция fetchData
возвращает промис, который «завершается» через 2 секунды. Мы используем метод then
промиса, чтобы задать функцию, которая будет вызвана после завершения промиса и обработать полученные данные.
Пример использования промиса в коде на TypeScript будет выглядеть похожим образом:
// Функция, которая возвращает промис, имитирующий загрузку данных с сервера function fetchData(): Promise<string> { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Данные успешно загружены"); }, 2000); }); } export async function main(): Promise<void> { try { const data: string = await fetchData(); console.log(data); // Выводит "Данные успешно загружены" через 2 секунды } catch (error) { console.error(error); } } // Вызов функции main main();
В этом примере мы создали асинхронную функцию main
, которая возвращает Promise<void>
. Внутри этой функции мы используем await
для ожидания завершения промиса, возвращаемого функцией fetchData
. После завершения этого промиса мы выводим результат в консоль. Функция main
вызывается в самом конце файла.
Сохранив данный код в файл file.ts, можно вызвать его командой из консоли, предварительно установив TypeScript
и ts-node
:
npm ts-node file.ts