если исключение произошло для обещания, которое вернул then()
, не должен ли код обрабатывать исключение при запуске promise.then()
?
Исключение, которое будет произойти в Обещании, возвращенном then
, еще не произошло бы, это произойдет только в микро-задаче этого Обещания, после того, как основное задание выполнено.
Promise.resolve()
.then( callback )
// still synchronously in the main task, no error yet
.catch( console.error );
console.log( "done with main task" );
// this will only get executed in a micro-task, when the main task is done
function callback() {
console.log( "will now throw" );
throw new Error( "not good" );
}
Таким образом, объекты Promise, возвращаемые этими .then()
и .catch()
, смогут просто нормально добавлять обратные вызовы, и ничто в основной задаче не выдаст.
Единственное, что может сбить с толку - это конструктор Promise, который синхронно переносит исключения:
const promise = new Promise( () => {
console.log( "will now throw" );
throw new Error( "not good" );
} );
console.log( "yet here we are fine" );
Но это не сильно отличается от событий:
addEventListener( 'test', e => {
console.log( "will now throw" );
throw new Error( "not good" );
} );
dispatchEvent( new Event( "test" ) );
console.log( "Yet we are fine" );