Page 240 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 240
Метод on класса EventEmitter как раз и позволяет прослушивать сообщения о со
бытии. В этом примере мы предоставляем обратный вызов для каждого события tick.
Если i c k не О, мы выводим его. Затем происходит вызов метода go, который запу
t
скает обратный отсчет. Когда обратный отсчет заканчивается, мы выводим строку
" С тарт ! " . Конечно, мы могли бы поместить вывод " С тарт ! " в обработчик события
t i ck, но так мы подчеркнули различие между событиями и обязательствами.
Результат, определенно, более подробен, чем наша первоначальная функция
countdown, и мы получили намного больше функциональных возможностей. Теперь
у нас есть полный контроль над регистрацией событий при обратном отсчете и обя
зательство, выполняемое при завершении обратного отсчета.
Мы все еще имеем в запасе одну задачу - мы не решили проблему суеверного
экземпляра Countdown, продолжающего обратный отсчет после 3 , даже при том что
1
обязательство было отклонено.
const с = new Countdown ( l 5 , true )
. on ( t ic ' , function ( ) { / / заметьте, мы можем "сцепить " вызов ' оп '
i
k
'
i f ( i > O ) console . l og ( i + ' . . . ) ;
'
} ) ;
(
с . go )
. then ( function ( )
console . log ( ' С тарт ! ' ) ;
} )
. c atch ( function ( e r r ) {
console . e rror ( e rr . m essag ) ;
e
} )
Мы получим сообщение о событии tick даже если будет достигнуто значение О
(хотя и не выводим информации о нем). Решение этой проблемы немного затруд
нительно, поскольку мы уже создали все нужные нам интервалы времени. Конечно,
здесь мы могли бы просто "смошенничать" и немедленно прервать работу, если су
еверный таймер создается для отсчета 1 3 или более секунд, но это противоречило
бы задаче упражнения! Для решения данной проблемы, поскольку мы обнаружили,
что не можем без этого продолжать, мы должны будем очистить все ожидающие об
работки интервалы времени.
e
const EventEmitter = require ( ' events ' ) . E ventEmitt r ;
class Countdown extends EventEmitter {
constructor ( s econds , superstit ious )
super ( ) ;
this . seconds = seconds ;
1 ! s uperstitious ;
this . superstitious =
(
go ) {
Обязательства 243

