Это работает!
function rejectedPromise() {
return Promise.reject("ERROR");
}
async function someFunction() {
try {
rejectedPromise()
.catch((err) => console.log(err)); // IT WORKS ! THE ERROR IS BEING LOGGED HERE
}
catch(err) {
console.log(err);
}
}
someFunction();
Это не так.
function rejectedPromise() {
return Promise.reject("ERROR");
}
async function someFunction() {
try {
rejectedPromise()
.catch((err) => { throw err; }); // CAN'T I THROW HERE ?
}
catch(err) {
console.log(err); // DOES NOT WORK. THE ERROR SHOULD BE LOGGED HERE
}
}
someFunction();
ВОПРОС
Почему?
Примечание: моя цель - throw
ошибка от catch
метод отклоненного обещания и throw
его, так что он обрабатывается внешним блоком catch
. Не знаю, имеет ли это значение, но это происходит внутри функции async
(в любом случае, если я уберу ключевое слово async
из примера, это не сработает).
EXTRA:
В Node я получаю следующее (даже при наличии блока перехвата):
UnhandledPromiseRejectionWarning: Необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри asyn c -функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (идентификационный номер отклонения: 1)