Помогите Васе перестать просыпать на пары. Для этого нужно написать программу-будильник-колыбельную с возможностью добавления, удаления, запусков и остановки звонков.
Необходимо написать класс AlarmClock с методами:
constructor
— выделяет память для объекта.
- Создайте свойство для хранения коллекции звонков
alarmCollection
с начальным значением пустого массива. - Создайте свойство
intervalId
для храненияid
таймера без начального значения.
addClock
— добавляет новый звонок в коллекцию существующих.
- Принимает параметр времени в формате
HH:MM
— время, когда действие должно запуститься. - Принимает параметр функции-колбека — действие, которое должно запуститься.
- Проверьте, переданы ли параметры времени и колбека. Если параметр не передан, выполните выброс ошибки с помощью
throw new Error('Отсутствуют обязательные аргументы')
. - Проверьте, есть ли звонок с таким же временем. Если есть, выведите предупреждение в консоль с помощью
console.warn('Уже присутствует звонок на это же время')
. - Перед завершением метода добавьте в массив звонков объект со свойствами
callback
,time
,canCall
. В свойствеcanCall
должно быть значение запуска функции колбека. Изначально значением должно бытьtrue
.
removeClock
— удаляет звонки по определённому времени.
- Принимает
time
звонка, который следует удалить. - Удалите из массива звонков те, у которых
time
совпадает со значением аргумента. Например, можно использовать методfilter
.
-
getCurrentFormattedTime
— возвращает текущее время в строковом форматеHH:MM
. -
start
— запускает будильник.
- Проверьте наличие значения в свойстве
intervalId
. Если в нём присутствует значение, то завершайте выполнение метода. Программа не должна позволять создавать несколько интервалов. - Создавайте новый интервал, в котором каждую секунду выполняйте действия:
- Перебирайте все звонки с помощью метода
forEach
. - При переборе каждый звонок проверяйте на возможность его запуска: свойство
time
совпадает с текущим временем, и звонок может выполняться (в свойствеcanCall
находитсяtrue
).
- При истином условии (необходимости запуска звонка) в свойство
canCall
(возможность вызова звонка) присваивайтеfalse
и вызывайте колбек звонка (свойствоcallback
).
- Перебирайте все звонки с помощью метода
- Результат создания интервала сохраняйте в свойство
intervalId
.
stop
— останавливает выполнение интервала будильника.
- Вызовите функцию
clearInterval
для удаления интервала. - Сбросьте значение из свойства
intervalId
. Для сброса свойства можно присваиватьnull
.
resetAllCalls
— сбрасывает возможность запуска всех звонков.
- С помощью метода
forEach
присваивайтеtrue
в свойствоcanCall
у каждого звонка.
clearAlarms
— удаляет все звонки.
- Вызывает метод остановки интервала (метод
stop
). - Удаляет все звонки. Для удаления всех звонков переприсваивайте свойство
alarmCollection
в пустой массив.
- Все тесты успешно выполняются.
- Соблюдается кодстайл.
- Решение загружено в форкнутый репозиторий GitHub.
- Решение опубликовано в GitHub Pages.
- Откройте файл
task.js
в вашем редакторе кода и выполните задание. - Проверьте соблюдение кодстайла. Форматируйте ваш код через форматтер https://codebeautify.org/jsviewer.
- Вы можете написать функцию
testCase
для проверки вашей работы. - Добавьте файл
task.js
в индексgit
с помощью командыgit add %file-path%
, где%file-path%
— путь до целевого файлаgit add ./7.async/task.js
. - Сделайте коммит, используя команду
git commit -m '%comment%'
, где%comment%
— это произвольный комментарий к вашему коммитуgit commit -m 'Седьмое задание полностью готово'
. - Опубликуйте код в репозиторий
homeworks
с помощью командыgit push -u origin main
. - На проверку пришлите 2 ссылки. На файл с решением (
task.js
) и на страницу GitHub Pages — страницу с автотестами:https://%USERNAME%.github.io/bjs-2-homeworks/7.async
.
Никакие файлы прикреплять не нужно.
Все задачи обязательны к выполнению для получения зачёта. Можете прислать на проверку как каждую задачу по отдельности, так и все задачи вместе. Во время проверки по частям у вашей домашней работы будет статус «На доработке».
Любые вопросы по решению задач задавайте в чате учебной группы.