Что такое метод resolve в Promise
Разбор вопроса «Что такое метод resolve в Promise» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Что такое метод resolve в Promise
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает механизм работы Promise, включая переход между состояниями (pending → fulfilled). Важно показать практическое применение resolve, например, для обертки асинхронных операций или мокирования данных в тестах.
Ключевые тезисы
- Метод resolve — это функция, которая переводит Promise в состояние 'выполнено' (fulfilled) с переданным значением.
- Он используется внутри исполнительной функции Promise (executor) для успешного завершения асинхронной операции.
- Пример: new Promise((resolve) => resolve('Успех')) создает Promise, который сразу резолвится со строкой 'Успех'.
Подробный ответ
Метод resolve — это один из ключевых инструментов в работе с Promise в JavaScript. Он используется для перевода Promise в состояние 'выполнено' (fulfilled) с передачей результата. Когда вызывается resolve, Promise считается завершенным успешно, и его значение передается в цепочку вызовов .then(). Это позволяет обрабатывать результаты асинхронных операций в удобной и предсказуемой форме. Исполнительная функция Promise (executor) принимает два аргумента: resolve и reject. Первый используется для успешного завершения, а второй — для обработки ошибок. Метод resolve можно вызывать только внутри исполнительной функции, и он принимает любое значение, которое будет передано в следующий .then(). Если в resolve передается другой Promise, то текущий Promise будет ожидать его завершения и примет его результат. Это делает resolve мощным инструментом для работы с цепочками асинхронных операций.
Практические примеры
Пример 1
Пример создания простого Promise с использованием resolve: new Promise((resolve) => { setTimeout(() => resolve('Данные загружены'), 1000); }).then((data) => console.log(data)); Здесь Promise резолвится через секунду со строкой 'Данные загружены'.Пример 2
Пример передачи другого Promise в resolve: const innerPromise = new Promise((resolve) => resolve('Внутренний Promise')); new Promise((resolve) => resolve(innerPromise)).then((result) => console.log(result)); Здесь внешний Promise будет ждать завершения innerPromise и выведет его результат.Пример 3
Пример использования resolve в асинхронной функции: async function fetchData() { return new Promise((resolve) => setTimeout(() => resolve('Данные получены'), 500)); } fetchData().then((data) => console.log(data)); Здесь асинхронная функция возвращает Promise, который резолвится через 500 мс.Частые ошибки
- Типичная ошибка — попытка вызвать resolve вне исполнительной функции Promise. Это приведет к ошибке, так как resolve доступен только внутри функции-исполнителя.
- Еще одна ошибка — вызов resolve несколько раз в одном Promise. Хотя это не вызовет ошибки, только первый вызов resolve будет иметь эффект, а последующие игнорируются.
Связанные темы
- Цепочки вызовов .then() и .catch() в Promise
- Метод reject и обработка ошибок в Promise
- Асинхронные функции (async/await) и их связь с Promise
- Состояния Promise: pending, fulfilled, rejected
Follow-up вопросы
Что произойдет, если вызвать resolve несколько раз в одном Promise?
Уровень: basic
Метод resolve можно вызвать только один раз. Последующие вызовы будут проигнорированы, и Promise останется в состоянии 'выполнено' с первым переданным значением.
Можно ли передать другой Promise в метод resolve? Что произойдет?
Уровень: intermediate
Да, можно передать другой Promise. В этом случае исходный Promise будет резолвиться только после завершения переданного Promise, и его результатом будет значение из этого Promise.
В чем разница между resolve и reject в Promise?
Уровень: basic
resolve переводит Promise в состояние 'выполнено' (fulfilled) с переданным значением, а reject переводит его в состояние 'отклонено' (rejected) с указанием причины ошибки.
Как метод resolve связан с цепочкой вызовов .then()?
Уровень: intermediate
Когда Promise резолвится с помощью resolve, следующий .then() в цепочке получает переданное значение и выполняет указанную в нем функцию.
Можно ли использовать resolve вне исполнительной функции Promise?
Уровень: advanced
Нет, resolve доступен только внутри исполнительной функции Promise, которая передается в конструктор new Promise(). Использование его вне этого контекста вызовет ошибку.
Что выполняется первым: Promise или setTimeout
Разбор вопроса «Что выполняется первым: Promise или setTimeout» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Что такое Promise.allSettled в JavaScript
Разбор вопроса «Что такое Promise.allSettled в JavaScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.