Что такое Promise.resolve
Разбор вопроса «Что такое Promise.resolve» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Что такое Promise.resolve
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает назначение и применение Promise.resolve, а также его отличие от других методов работы с Promise. Важно показать, как метод помогает в работе с асинхронными операциями.
Ключевые тезисы
- Promise.resolve — это статический метод, который возвращает Promise, разрешённый с переданным значением.
- Если переданное значение уже является Promise, метод вернёт его без изменений.
- Метод полезен для приведения любого значения к Promise, что упрощает работу с асинхронным кодом.
- Пример использования: Promise.resolve(42) создаст Promise, который сразу разрешится со значением 42.
Подробный ответ
Promise.resolve — это статический метод объекта Promise, который создает и возвращает Promise, немедленно разрешающийся с переданным значением. Этот метод полезен для приведения любого значения к Promise, что упрощает работу с асинхронным кодом. Если переданное значение уже является Promise, метод вернет его без изменений. Это особенно удобно, когда вы не уверены, является ли значение Promise или нет, и хотите гарантированно работать с Promise.
Promise.resolve также может принимать thenable объекты (объекты с методом then). В этом случае Promise.resolve будет "разворачивать" thenable, вызывая его метод then, и возвращать новый Promise, который разрешится или отклонится в зависимости от результата thenable. Это позволяет интегрировать сторонние Promise-подобные объекты в стандартную цепочку Promise.
Метод часто используется для старта цепочек Promise, когда нужно начать с известного значения, или для оборачивания синхронных операций в Promise. Например, если функция должна всегда возвращать Promise, но иногда результат известен сразу, можно использовать Promise.resolve для соблюдения контракта.
Практические примеры
Пример 1
Пример 1: Создание разрешенного Promise с числом
const p = Promise.resolve(42);
p.then(value => console.log(value)); // 42Пример 2
Пример 2: Обработка thenable объекта
const thenable = {
then: function(resolve) {
resolve('resolved!');
}
};
Promise.resolve(thenable)
.then(value => console.log(value)); // 'resolved!'Пример 3
Пример 3: Начало цепочки Promise
function fetchData() {
return Promise.resolve()
.then(() => fetch('/api/data'))
.then(response => response.json());
}Частые ошибки
- Путаница между Promise.resolve и new Promise: некоторые кандидаты думают, что Promise.resolve(value) и new Promise((resolve) => resolve(value)) всегда эквивалентны, но разница проявляется при передаче thenable объектов.
- Игнорирование случая, когда передается Promise: кандидаты иногда забывают, что Promise.resolve возвращает переданный Promise без изменений, что может привести к неожиданному поведению при работе с уже существующими Promise.
Связанные темы
- Promise.reject — статический метод для создания отклоненных Promise
- Цепочки Promise (Promise chaining)
- Обработка ошибок в Promise (catch/finally)
- Async/await как альтернатива Promise
Follow-up вопросы
В чем разница между Promise.resolve(value) и new Promise((resolve) => resolve(value))?
Уровень: intermediate
Оба варианта создают разрешенный Promise, но Promise.resolve() более лаконичен и оптимизирован. Внутренне он может избежать создания лишнего микрозадания (microtask) в некоторых случаях.
Что произойдет, если передать thenable объект в Promise.resolve()?
Уровень: advanced
Promise.resolve() развернет thenable объект (объект с методом then), создав новый Promise, который будет следовать состоянию thenable. Это часть Promise assimilation механизма.
Можно ли использовать Promise.resolve() для создания цепочек Promise?
Уровень: basic
Да, Promise.resolve() часто используется как стартовая точка цепочки. Например: Promise.resolve().then(() => fetchData()).then(...). Это гарантирует, что последующие then/catch будут выполнены асинхронно.
Как Promise.resolve() ведет себя с undefined или без аргументов?
Уровень: basic
При вызове без аргументов или с undefined Promise.resolve() создаст Promise, разрешенный с undefined. Это полезно для начала цепочки без начального значения.
Когда стоит использовать Promise.resolve() вместо async/await?
Уровень: intermediate
Promise.resolve() полезен когда нужно явно создать Promise или обернуть синхронное значение. Async/await лучше для последовательностей асинхронных операций. Они дополняют друг друга и часто используются вместе.
Что такое Promise.allSettled в JavaScript
Разбор вопроса «Что такое Promise.allSettled в JavaScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
console.log() - синхронная или асинхронная операция
Разбор вопроса «console.log() - синхронная или асинхронная операция» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.