Чем отличается Promise.resolve/reject от throw в async функции?
1️⃣ Как кратко ответить
В async функции Promise.resolve() возвращает успешно завершенный промис, Promise.reject() возвращает отклоненный промис, а throw выбрасывает исключение, которое автоматически преобразуется в отклоненный промис.
2️⃣ Подробное объяснение темы
В JavaScript async функции всегда возвращают промис. Это значит, что независимо от того, что происходит внутри функции, результат будет обернут в промис. Рассмотрим, как работают Promise.resolve(), Promise.reject() и throw в контексте async функций.
Promise.resolve()
Когда внутри async функции вызывается Promise.resolve(value), это означает, что функция возвращает успешно завершенный промис с указанным значением. Это полезно, когда вы хотите явно указать, что операция завершилась успешно.
async function exampleResolve() {
return Promise.resolve('Success');
}
exampleResolve().then(result => {
console.log(result); // Выведет: Success
});
async function exampleResolve()— объявление асинхронной функции.return Promise.resolve('Success')— возвращает успешно завершенный промис с результатом'Success'.exampleResolve().then(...)— обрабатывает успешно завершенный промис и выводит результат.
Promise.reject()
Promise.reject(reason) используется для возврата отклоненного промиса с указанной причиной. Это позволяет явно указать, что операция завершилась с ошибкой.
async function exampleReject() {
return Promise.reject('Error occurred');
}
exampleReject().catch(error => {
console.log(error); // Выведет: Error occurred
});
async function exampleReject()— объявление асинхронной функции.return Promise.reject('Error occurred')— возвращает отклоненный промис с причиной'Error occurred'.exampleReject().catch(...)— обрабатывает отклоненный промис и выводит ошибку.
throw
В async функции оператор throw используется для выброса исключения. Однако, в контексте async функции, выброшенное исключение автоматически преобразуется в отклоненный промис. Это значит, что throw и Promise.reject() в async функции ведут себя схожим образом.
async function exampleThrow() {
throw new Error('Something went wrong');
}
exampleThrow().catch(error => {
console.log(error.message); // Выведет: Something went wrong
});
async function exampleThrow()— объявление асинхронной функции.throw new Error('Something went wrong')— выбрасывает исключение, которое преобразуется в отклоненный промис.exampleThrow().catch(...)— обрабатывает отклоненный промис и выводит сообщение об ошибке.
Сравнение
Promise.resolve()иPromise.reject()возвращают промисы с явным указанием результата или ошибки.throwвasyncфункции автоматически преобразуется в отклоненный промис, аналогичноPromise.reject().- Использование
throwболее интуитивно для обработки ошибок, так как оно ближе к традиционной модели обработки исключений в JavaScript.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться