Дмитрий Нечаев
Promise в JavaScript
Promise в JavaScript — это объект, представляющий завершение или провал асинхронной операции и её результирующее значение. Промисы используются для управления асинхронным кодом, позволяя организовать его более читаемым и удобным образом, избегая так называемого "callback hell". Вот простой пример:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => resolve("данные получены"), 1000);
});
promise.then(data => {
console.log(data); // выводит "данные получены" после 1 секунды
});
В этом примере Promise
создаётся с функцией, которая через секунду "разрешается" с некоторыми данными. then()
используется для обработки этих данных после их получения.
Promise
- это фундаментальная концепция в асинхронном JavaScript, представляющая собой объект, который может иметь одно из трех состояний: ожидание, выполнено или отклонено. Понимание Promise
является необходимым условием для работы с асинхронным кодом в современных веб-приложениях. Чтобы получить полное представление о Promise
, их применении и связанных концепциях, таких как async/await
, вам потребуется глубокое понимание асинхронного JavaScript. Если вы хотите детальнее погрузиться в JavaScript — приходите на наш большой курс JavaScript Advanced. На курсе 196 уроков и 18 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Методы
Цепочки методов
Цепочка промисов позволяет последовательно выполнить несколько асинхронных операций. Каждый следующий метод then
начинает работу только после того, как предыдущий промис разрешается.
new Promise(function(resolve, reject) {
setTimeout(() => resolve(1), 1000); // первый асинхронный шаг
}).then(function(result) {
console.log(result); // выводит 1
return result * 2;
}).then(function(result) {
console.log(result); // выводит 2
return result * 2;
}).then(function(result) {
console.log(result); // выводит 4
});
Обработка ошибок в цепочках методов
Для обработки ошибок в цепочках промисов используется метод catch()
. Он перехватывает любые ошибки, возникшие на любом этапе выполнения цепочки.
new Promise((resolve, reject) => {
throw new Error("произошла ошибка");
}).catch(err => {
console.error(err); // обрабатывает ошибку
});
Другие полезные методы промисов
- Promise.all([promises]): Ожидает выполнения всех промисов. Если один из промисов отклоняется, результатом будет первая возникшая ошибка.
- Promise.race([promises]): Возвращает результат первого завершившегося промиса, независимо от того, был ли он разрешён или отклонён.
- Promise.resolve(value) и Promise.reject(reason): Создают промисы, которые немедленно разрешаются или отклоняются соответственно.
Как создать асинхронную функцию с промисом
Асинхронная функция возвращает промис и позволяет использовать асинхронный код, как будто он синхронный, с помощью ключевых слов async
и await
.
async function fetchData() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("данные загружены"), 1000);
});
const result = await promise; // ждёт, пока промис не разрешится
console.log(result);
}
fetchData();
Промисы схлопываются
Промисы могут "схлопываться", что означает, что промис может возвращать другой промис, и этот процесс продолжается до тех пор, пока не будет возвращён окончательный результат.
let promise = new Promise(resolve => {
resolve(new Promise(resolve => resolve(5)));
});
promise.then(console.log); // выводит 5
Знание Promise
- это лишь первый шаг в освоении асинхронного JavaScript. Чтобы эффективно использовать Promise
в сложных приложениях, необходимо понимать принципы работы async/await
, Event Loop и других продвинутых техник. Эти темы подробно рассматриваются на курсе JavaScript Advanced. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир продвинутого JavaScript прямо сегодня.
Постройте личный план изучения Javascript до уровня Middle — бесплатно!
Javascript — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Javascript
Лучшие курсы по теме

Основы JavaScript
Антон Ларичев
TypeScript с нуля
Антон Ларичев