Answer
t.me/js_testОтвет:
new Promise((resolve, reject)
Объяснение:
.catch
ведёт себя как try..catch
. Мы можем иметь столько обработчиков .then
, сколько мы хотим, и затем использовать один .catch
в конце, чтобы перехватить ошибки из всех обработчиков.
В обычном try..catch
мы можем проанализировать ошибку и повторно пробросить дальше, если не можем её обработать. То же самое возможно для промисов.
Если мы пробросим (throw
) ошибку внутри блока .catch
, то управление перейдёт к следующему ближайшему обработчику ошибок. А если мы обработаем ошибку и завершим работу обработчика нормально, то продолжит работу ближайший успешный обработчик .then
.
В примере ниже мы видим другую ситуацию с блоком .catch
. Обработчик (*)
перехватывает ошибку и не может обработать её (например, он знает как обработать только URIError
), поэтому ошибка пробрасывается далее.
Управление переходит от первого блока .catch
(*)
к следующему (**)
, вниз по цепочке.
Код для проверки:
new Promise((resolve, reject) => { throw new Error("Ошибка!"); }).catch(function(error) { // (*) if (error instanceof URIError) { } else { alert("Не могу обработать ошибку"); throw error; } }).then(function() { }).catch(error => { // (**) alert(`Неизвестная ошибка: ${error}`); });