JavaScript: Что такое промисы (Promise) простыми словами?

Промисы (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

 

Рейтинг
( 73 оценки, среднее 3 из 5 )
Понравилась статья? Поделиться с друзьями: