then
может принимать два параметра:
- один для случая, когда обещание выполнено
- другой для случая, когда обещание отклоняется (целенаправленно или из-за исключения было исключено)
Если есть ошибка при выполнении t он код, либо в заполненном, либо отклоненном, выполнение будет продолжено в следующем отклоненном обратном вызове. В вашем коде первый отклоненный обратный вызов - это тот, который указан в обратном вызове catch
. Если этого блока не существовало, исключение будет продолжать пузыриться до первого блока catch
в коде. И, если бы не было такого блока, он был бы обработан браузером и отображался как ошибка для пользователя.
Если вас look at the documentation, вы увидите, что catch
точно так же как then
, который принимает только второй параметр:
Promise.prototype.then(onFulfilled, onRejected)
Promise.prototype.catch(onRejected)
Вы также можете посмотреть на this documentation on handling exceptions with promises.
Вся идея обещаний быть в состоянии цепи, то, таким образом, что Сукчес распространяется на onFullfilled
обратный вызов, который может работать без ошибок, и вернуть что-то для следующего onFullfilled
обработчика, или запустить с ошибкой, с будет обрабатывается следующим onRejected
. Ошибка может быть целенаправленным отказом или необработанным исключением.
'явно возвращать отклонение 'или' бросать' ошибку –
Да ... но точка Обещает, что она использует свою монадическую структуру, чтобы избежать необходимости «бросать» –