Вопросы собес Front
January 7, 2025

Что такое Promise, методы Promis'ов + async await

Promise — это объект в JavaScript, который представляет собой результат асинхронной операции. Он позволяет работать с асинхронным кодом более удобно и читабельно, чем использование колбеков. Promise может находиться в одном из трех состояний:

1. Ожидание (Pending): начальное состояние, ни выполнено, ни отклонено.

2. Выполнено (Fulfilled): операция завершилась успешно.

3. Отклонено (Rejected): операция завершилась с ошибкой.

Создание Promise

Вы можете создать новый объект Promise, передав в конструктор функцию с двумя параметрами: resolve и reject.

const myPromise = new Promise((resolve, reject) => {

const success = true; // Имитация успешного выполнения

if (success) {

resolve("Операция выполнена успешно!");

} else {

reject("Произошла ошибка.");

}

});

Методы Promise

1. then(): используется для обработки успешного результата. Возвращает новый Promise.

myPromise

.then(result => {

console.log(result); // Вывод: Операция выполнена успешно!

})

.catch(error => {

console.error(error);

});

2. catch(): используется для обработки ошибок, произошедших в процессе выполнения Promise.

myPromise

.then(result => {

console.log(result);

})

.catch(error => {

console.error(error); // Выводит ошибку, если она произошла

});

3. finally(): выполняется после завершения Promise, независимо от того, был он выполнен или отклонен.

myPromise

.then(result => {

console.log(result);

})

.catch(error => {

console.error(error);

})

.finally(() => {

console.log("Завершение операции."); // Выполнится в любом случае

});

Пример использования Promise

function fetchData() {

return new Promise((resolve, reject) => {

setTimeout(() => {

const data = { name: "John", age: 30 };

resolve(data);

}, 2000);

});

}

fetchData()

.then(data => {

console.log(data); // Вывод: { name: "John", age: 30 }

})

.catch(error => {

console.error(error);

});

Async/Await

async/await — это синтаксический сахар для работы с Promise, который делает код более читабельным и линейным.

• async: перед функцией указывает, что функция будет асинхронной и будет возвращать Promise.

• await: используется для ожидания завершения Promise. Это можно использовать только внутри асинхронной функции.

Пример использования async/await

async function getData() {

try {

const data = await fetchData(); // Ждем, пока fetchData выполнится

console.log(data); // Вывод: { name: "John", age: 30 }

} catch (error) {

console.error(error); // Обработка ошибок

} finally {

console.log("Завершение операции."); // Выполнится в любом случае

}

}

getData();

Заключение

Promise и async/await позволяют эффективно управлять асинхронными операциями в JavaScript. Использование Promise упрощает обработку результатов асинхронных операций, а async/await делает код более понятным и легким для чтения, позволяя писать асинхронный код в стиле синхронного.