Обещания в JavaScript: введение

Если вы когда-либо работали с асинхронными операциями в JavaScript, возможно, вы сталкивались с концепцией промисов. Промисы предоставляют способ обработки асинхронных операций более элегантным и управляемым способом. В этом сообщении блога мы рассмотрим основы промисов и приведем примеры того, как их можно использовать.

Что такое обещание?

Обещание — это объект, представляющий значение, которое может быть еще недоступно, но будет разрешено в будущем. Промисы используются для обработки асинхронных операций, таких как запросы API, запросы к базе данных и другие длительные задачи. Три состояния обещания:

  1. Ожидание: начальное состояние промиса до того, как оно будет разрешено или отклонено.
  2. Разрешено: состояние обещания, когда оно успешно разрешено со значением.
  3. Отклонено: состояние промиса, когда его невозможно разрешить со значением.

Обещания предоставляют способ обработки асинхронных операций, которые зависят друг от друга. Например, если вам нужно сделать запрос API для получения некоторых данных, а затем использовать эти данные для создания другого запроса API, вы можете использовать промисы, чтобы гарантировать, что второй запрос ожидает завершения первого запроса перед выполнением.

Создание обещания

Промисы создаются с помощью конструктора промисов. Конструктор промиса принимает единственный аргумент — функцию, которая вызывается сразу же после создания промиса. Функция принимает два аргумента: функцию разрешения и функцию отклонения.

Вот пример создания промиса, который разрешается через определенное время:

javascriptCopy codeconst myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Promise resolved!');
  }, 1000);
});

В этом примере создается обещание, а затем сразу устанавливается тайм-аут в 1 секунду. По истечении тайм-аута обещание разрешается со значением «Промис разрешен!».

Использование обещания

После создания обещания его можно использовать для обработки асинхронной операции. Промисы предоставляют метод then(), который вызывается, когда промис успешно разрешен, и метод catch(), который вызывается, когда промис отклоняется. Метод then() принимает функцию обратного вызова в качестве аргумента, который выполняется при разрешении обещания, а метод catch() принимает функцию обратного вызова в качестве аргумента, который выполняется при отклонении обещания.

Вот пример использования обещания, которое мы создали ранее:

javascriptCopy codemyPromise.then((result) => {
  console.log(result);
}).catch((error) => {
  console.error(error);
});

В этом примере метод then() принимает функцию обратного вызова, которая записывает результат обещания в консоль. Метод catch() использует функцию обратного вызова, которая регистрирует все возникающие ошибки.

Цепочка обещаний

Обещания также могут быть объединены в цепочку для обработки нескольких асинхронных операций, которые зависят друг от друга. Это делается с помощью метода then(), который возвращает новое обещание. Новое обещание разрешается со значением, возвращаемым функцией обратного вызова метода then().

Вот пример объединения обещаний в цепочку:

javascriptCopy codeconst firstPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('First Promise resolved!');
  }, 1000);
});
const secondPromise = firstPromise.then((result) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(`${result} Second Promise resolved!`);
    }, 1000);
  });
});
secondPromise.then((result) => {
  console.log(result);
}).catch((error) => {
  console.error(error);
});

В этом примере мы создаем два обещания. Первое обещание разрешается через 1 секунду со значением «Первое обещание разрешено!». Второе обещание связано с первым обещанием

Счастливого обучения :)