Gernar
JavaScript: асинхронность

Что такое метод 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(). Использование его вне этого контекста вызовет ошибку.

Содержание