Я наблюдаю некоторое непоследовательное поведение при работе с обещанием, которое не может быть выполнено из-за непредвиденного необработанного исключения.Кажется, что в зависимости от того, как цепочка обещаний меняется, решается ли это обещание, и я не понимаю, почему.
Вот плохая функция:
function bad() {
return new Promise(resolve => {
setTimeout(() => {
throw 'unforseen exception!';
resolve();
}, 50);
});
}
Если я вызываю эту функцию,способы, которые он не разрешает:
bad().then(() => console.log('resolved')); // no console logging
try {
await bad();
} catch(e) {
console.log(e);
}
console.log('resolved'); // no console logging
Но, если назвать его так, это решит:
Promise.resolve().then(bad()).then(() => console.log('resolved')); // console logs "resolved"
Почему это так? Редактировать: Теперь я понимаю, чем я былделаю неправильно.Но я действительно хочу ответить на следующую часть.
И как мне лучше защитить себя от непредвиденных исключений, когда у меня есть цепочка обещаний, которые должны выполняться последовательно и должны выполняться, даже если где-то в цепочке произошел сбой?
Я также пытался использовать catch или наконец, но они, кажется, не имеют никакого значения.Как только это неразрешенное обещание будет достигнуто, выполнение не будет выполнено.