Page 237 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 237
только одно событие - выполнение или отклонение (в настоящее время в нашей
функции нет ветки для реализации отклонения).
Использ о в а н и е обязательств
Давайте посмотрим, как мы можем использовать свою функцию countdown. Мы
могли бы только вызвать ее и проигнорировать обязательство вообще: countdown ( 5) .
В результате мы также получим свой обратный отсчет и можем не возиться с обяза
тельствами вообще. Но что если необходимо воспользоваться преимуществами обя
зательств? Вот как мы используем возвращаемое обязательство.
countdown ( 5 ) . t hen (
function ) {
(
соnsоlе . l оg ( "Обратный отчет заверше " ) ;
н
} ,
(
function e rr) {
e
console . l og ( " Oшибкa при обратном отсчете : " + err . m essag ) ;
) ;
В этом примере мы не потрудились присвоить возвращенное обязательство пере
менной; мы просто вызвали его (метод then) обработчик непосредственно. Этому
обработчику передается две функции обратного вызова: первая вызывается при вы
полнении обязательства (т.е. при нормальном завершении), а вторая - при его от
клонении (т.е. при возникновении ошибки). Причем вызвана будет только одна из
этих функций. Обязательства поддерживают также обработчик catch. Таким обра
зом, вы можете разделить эти два обработчика (мы также сохранили обязательство
в переменной, чтобы продемонстрировать это).
con t р = countdown ( 5 ) ;
s
p . t hen ( f unction ( ) {
н
соnsоlе . l оg ( " Обратный отчет заверше " ) ;
} ) ;
p . catch ( f unction ( e r r ) {
console . log ( "Oшибкa при обратном отсчете : " + err . m essage ) ;
} ) ;
Давайте изменим нашу функцию countdown так, чтобы создать условие для воз
никновения ошибки. Предположим, что мы суеверны и считаем ошибкой случай,
если при счете встретится число 1 3 .
function countdown ( s econds ) {
return new Promise ( f unction ( r esolve , rej ect ) {
for ( l e t i=seconds ; i>=O ; i--) {
setTimeout ( function ( ) {
=
i f ( i == l З ) return rej ect ( n ew Еrrоr ( "Принципиально это не
м
считае ! " ) ) ;
240 Глава 1 4 . Асинхронное программирование

