Промисы

Модуль 1: Web Core
22 уровень , 1 лекция
Открыта

2.1 Создание промисов

Промисы (Promises) — это объект, представляющий завершение (или неудачу) асинхронной операции и ее результат. Они были введены в ES6 (ECMAScript 2015) и стали стандартным способом работы с асинхронным кодом в JavaScript.

Основные концепции

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

  1. Pending (ожидание): начальное состояние, не выполнен и не отклонен.
  2. Fulfilled (выполнен): операция завершена успешно.
  3. Rejected (отклонён): операция завершена с ошибкой.

Создание промиса

Промис создается с использованием конструктора Promise, который принимает функцию-исполнитель (executor function). Эта функция принимает два аргумента: resolve и reject. Внутри этой функции выполняется асинхронный код, и в случае успеха вызывается resolve, а в случае ошибки — reject.

Синтаксис:

    
      const promise = new Promise((resolve, reject) => {
        // Асинхронная операция
        if (/* успешное завершение */) {
          resolve(value); // Успех
        } else {
          reject(error); // Ошибка
        }
      });
    
  

Пример создания промиса:

JavaScript
    
      const myPromise = new Promise((resolve, reject) => {
        const success = true; // Условие для успешного выполнения

        if (success) {
          resolve('Operation was successful');
        } else {
          reject('Operation failed');
        }
      });
    
  

2.2 Использование промисов

Метод then

Метод then используется для обработки успешного выполнения промиса. Он принимает две функции: первую для обработки успешного выполнения и вторую для обработки ошибок. Однако обычно для обработки ошибок используется метод catch.

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

JavaScript
    
      myPromise.then(
        (successMessage) => {
          console.log(successMessage); // Выведет: Operation was successful
        },
        (errorMessage) => {
          console.error(errorMessage); // Будет вызвано в случае ошибки
        }
      );
    
  

Метод catch

Метод catch используется для обработки ошибок промиса. Он принимает одну функцию, которая будет вызвана в случае отклонения промиса.

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

JavaScript
    
      myPromise
        .then((successMessage) => {
          console.log(successMessage);
        })
        .catch((errorMessage) => {
          console.error(errorMessage); // Будет вызвано: Operation failed
        });
    
  

Метод finally

Метод finally используется для выполнения кода независимо от результата промиса (успешный или с ошибкой). Он не принимает аргументов и выполняется в любом случае после выполнения или отклонения промиса.

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

JavaScript
    
      myPromise
        .then((successMessage) => {
          console.log(successMessage);
        })
        .catch((errorMessage) => {
          console.error(errorMessage);
        })
        .finally(() => {
          console.log('Operation completed'); // Будет вызвано в любом случае
        });
    
  

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

Пример 1: Асинхронная операция с использованием промиса

Симуляция асинхронной операции с таймером.

JavaScript
    
      function asyncOperation() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const success = Math.random() > 0.5;

            if (success) {
              resolve('Async operation was successful');
            } else {
              reject('Async operation failed');
            }
          }, 2000);
        });
      }

      asyncOperation()
        .then((message) => {
          console.log(message);
        })
        .catch((error) => {
          console.error(error);
        })
        .finally(() => {
          console.log('Async operation completed');
        });
    
  

Пример 2: Последовательное выполнение промисов

Симуляция последовательных асинхронных операций.

JavaScript
    
      function firstOperation() {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('First operation completed');
            resolve('First result');
          }, 1000);
        });
      }

      function secondOperation(result) {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('Second operation completed');
            resolve(`Second result, received: ${result}`);
          }, 1000);
        });
      }

      firstOperation()
        .then((result) => {
          return secondOperation(result);
        })
        .then((finalResult) => {
          console.log(finalResult);
        })
        .catch((error) => {
          console.error(error);
        })
        .finally(() => {
          console.log('Both operations completed');
        });
    
  

Пример 3: Параллельное выполнение промисов с Promise.all

Симуляция параллельных асинхронных операций.

JavaScript
    
      function operationOne() {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('Operation One completed');
            resolve('Result One');
          }, 1000);
        });
      }

      function operationTwo() {
        return new Promise((resolve) => {
          setTimeout(() => {
            console.log('Operation Two completed');
            resolve('Result Two');
          }, 1500);
        });
      }

      Promise.all([operationOne(), operationTwo()])
        .then((results) => {
          console.log('All operations completed');
          console.log(results); // Выведет: ['Result One', 'Result Two']
        })
        .catch((error) => {
          console.error('One of the operations failed', error);
        });
    
  
1
Задача
Модуль 1: Web Core, 22 уровень, 1 лекция
Недоступна
Асинхронная операция
Асинхронная операция
1
Задача
Модуль 1: Web Core, 22 уровень, 1 лекция
Недоступна
Параллельные операции
Параллельные операции
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Gans Electro Уровень 4
22 ноября 2025
+ лекция в копилке