Page 241 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 241
i
const countdown = th s ;
const timeoutids = [ ] ;
return new Promise ( function ( r esolve , rej ect ) {
for ( l et i=countdown . s econds ; i>=O ; i - - ) {
t i meout ids . p ush ( setTimeout ( function ( ) {
=
i f ( countdown . s uperstitious && i== l З )
/ / очистить все о ж идающие об р аботки периоды
t
t i meou i ds . forEach ( clearTimeout ) ;
return rej ect (new Еrrоr ( " Принципиально это не
считае ! " ) ) ;
м
countdown . e mit ( ' t ic ' , i ) ;
k
i f ( i == O ) resolve ( ) ;
=
} , ( c ountdown . seconds-i ) * 1 0 0 0 ) ) ;
} ) ;
Сцепл е н и е обязательств
Одно из преимуществ обязательств в том, что они могут быть сцетzены (chained),
т.е. когда одно обязательство выполняется, вы можете немедленно вызвать другую
функцию, которая возвращает обязательство". и т.д. Давайте создадим функцию
launch, которую мы можем сцепить с обратным отсчетом.
function launch ( ) {
return new Promise ( f unction ( r esolve , rej ect ) {
и
console . l og ( "Пoexaл ! " ) ;
setTimeout ( f unction ( ) {
resolve ( " Ha орбите ! " ) ;
} , 2 * 1 0 0 0 ) ; / / действительно очень быстрая ракета
} ) ;
Сцепить эту функцию с обратным отсчетом довольно просто.
const с = new Countdown ( 5 )
. o n ( ' t ic ' , i => console . l og ( i + ' . . . ) ' ) ;
k
c . g o )
(
. then l aunch)
(
. t hen ( function (msg)
g
console . l og (ms ) ;
} )
. c atch ( f unction ( e rr) {
console . e rror ( "Xьюcтoн, у нас проблемы . . . . " ) ;
} )
244 Глава 1 4 . Асинхронное программирование

