ENIGMA AI
ENIGMA AI
JavaScript Средний

Что такое промисы? Какие методы промисов вы знаете?

Промисы в JavaScript

Определение:

Promise — объект, представляющий результат асинхронной операции.

Состояния:

  • pending — ожидание
  • fulfilled — успех
  • rejected — ошибка

Создание:

const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        if (success) {
            resolve("Data");
        } else {
            reject(new Error("Failed"));
        }
    }, 1000);
});

Методы экземпляра:

then()

promise
    .then(result => {
        console.log(result);
        return processedResult;
    })
    .then(processed => {
        // Цепочка
    });

catch()

promise
    .then(result => process(result))
    .catch(error => console.error(error));

finally()

promise
    .then(result => use(result))
    .catch(error => handle(error))
    .finally(() => cleanup());  // Всегда выполняется

Статические методы:

Promise.all()

// Все должны успешно завершиться
const results = await Promise.all([
    fetch('/api/users'),
    fetch('/api/posts'),
    fetch('/api/comments')
]);
// Если один reject — всё reject

Promise.allSettled()

// Ждёт все, независимо от результата
const results = await Promise.allSettled([
    Promise.resolve(1),
    Promise.reject('error'),
    Promise.resolve(3)
]);
// [{status: 'fulfilled', value: 1},
//  {status: 'rejected', reason: 'error'},
//  {status: 'fulfilled', value: 3}]

Promise.race()

// Первый завершившийся (успех или ошибка)
const fastest = await Promise.race([
    fetch('/api/server1'),
    fetch('/api/server2')
]);

Promise.any()

// Первый успешный (игнорирует reject)
const first = await Promise.any([
    fetch('/api/main'),
    fetch('/api/fallback')
]);
// AggregateError если все reject

Promise.resolve() / Promise.reject()

const resolved = Promise.resolve(42);
const rejected = Promise.reject(new Error("Failed"));

async/await:

async function fetchData() {
    try {
        const response = await fetch('/api/data');
        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
    }
}

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы