Проверяет понимание механизма создания и изменения состояния Promise через функции resolve и reject.
Promise в JavaScript — это объект, представляющий результат асинхронной операции. Он может находиться в одном из трёх состояний: ожидание (pending), выполнено (fulfilled) или отклонено (rejected). Функции resolve и reject — это два аргумента, которые передаются в функцию-исполнитель (executor) при создании нового Promise. Они являются единственным способом изменить состояние Promise с pending на fulfilled или rejected.
Когда вы создаёте Promise, вы передаёте функцию с двумя параметрами: resolve и reject. Вызов resolve(value) переводит Promise в состояние fulfilled, и значение value становится результатом, который получат обработчики .then(). Вызов reject(error) переводит Promise в состояние rejected, и ошибка error передаётся в .catch() или второй аргумент .then().
Важно: Promise может быть изменён только один раз. Если сначала вызван resolve, то последующие вызовы resolve или reject игнорируются. Аналогично, если сначала вызван reject, то остальные вызовы не имеют эффекта. Это гарантирует, что асинхронная операция завершится ровно один раз.
const promise = new Promise((resolve, reject) => {
// Асинхронная операция, например, запрос к серверу
setTimeout(() => {
const success = true;
if (success) {
resolve('Данные получены');
} else {
reject(new Error('Ошибка запроса'));
}
}, 1000);
});
promise
.then(result => console.log(result)) // 'Данные получены'
.catch(error => console.error(error));В этом примере через 1 секунду вызывается resolve или reject в зависимости от условия. Promise переходит в соответствующее состояние, и вызывается нужный обработчик.
Механизм resolve и reject используется везде, где нужно работать с асинхронными операциями: запросы к API, чтение файлов, таймеры, работа с базами данных. Это основа для async/await, которая делает асинхронный код более читаемым.
Вывод: понимание resolve и reject необходимо для создания собственных Promise и управления асинхронными потоками. Это ключевой элемент современного JavaScript, который помогает избежать callback hell и делает код более предсказуемым.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию