Что нужно сделать чтобы произошел resolve у Promise?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что нужно сделать чтобы произошел resolve у Promise?
Promise в JavaScript — это объект, который представляет результат асинхронной операции. Чтобы произошел resolve (успешное разрешение), нужно вызвать специальную функцию resolve(), которая передается в конструктор Promise как аргумент.
Базовый механизм
Когда вы создаете Promise, вы передаете функцию (executor), которая получает два параметра: resolve и reject:
const promise = new Promise((resolve, reject) => {
// Здесь можно выполнить асинхронную операцию
});
Чтобы Promise перешел в состояние resolved, нужно вызвать функцию resolve() с результатом:
const promise = new Promise((resolve, reject) => {
resolve("Успех!");
});
promise.then((result) => {
console.log(result); // "Успех!"
});
Примеры вызова resolve
1. Простой случай
const promise = new Promise((resolve) => {
resolve(42);
});
promise.then((value) => {
console.log(value); // 42
});
2. С задержкой (setTimeout)
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve("Готово после 2 секунд");
}, 2000);
});
promise.then((result) => {
console.log(result);
});
3. С реальной асинхронной операцией (fetch)
const fetchData = () => {
return new Promise((resolve, reject) => {
fetch("https://api.example.com/data")
.then((response) => response.json())
.then((data) => resolve(data))
.catch((error) => reject(error));
});
};
fetchData().then((data) => {
console.log("Данные загружены:", data);
});
Ключевые моменты
Состояния Promise:
- Pending (ожидание) — начальное состояние
- Resolved (выполнено) — когда вызвана функция
resolve() - Rejected (отклонено) — когда вызвана функция
reject()
Когда Promise переходит в состояние resolved:
- Все обработчики, зарегистрированные через
.then(), будут вызваны - Значение, переданное в
resolve(), будет передано этим обработчикам - Promise больше не может измениться на другое значение
Важно: Функция resolve() должна быть вызвана только один раз. Дальнейшие вызовы resolve() или reject() будут проигнорированы:
const promise = new Promise((resolve, reject) => {
resolve("Первое значение");
resolve("Второе значение"); // Будет проигнорировано
reject(new Error("Ошибка")); // Тоже будет проигнорировано
});
promise.then((value) => {
console.log(value); // "Первое значение"
});
Async/await синтаксис
В современном коде часто используется async/await вместо конструктора Promise:
async function getData() {
// Функция автоматически возвращает Promise
return "Данные получены";
// resolve происходит автоматически с возвращаемым значением
}
getData().then((data) => {
console.log(data); // "Данные получены"
});
Резюме: для resolve Promise нужно вызвать функцию resolve(), передав ей значение результата. Это переводит Promise из состояния "ожидание" в состояние "успешное выполнение", и все обработчики .then() получат это значение.