Помогите Васе перестать просыпать на пары. Для этого нужно написать программу-будильник-колыбельную с возможностью добавления, удаления, запусков и остановки звонков.
Необходимо написать класс 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.
- Добавьте файл
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.
Никакие файлы прикреплять не нужно.
Все задачи обязательны к выполнению для получения зачёта. Можете прислать на проверку как каждую задачу по отдельности, так и все задачи вместе. Во время проверки по частям у вашей домашней работы будет статус «На доработке».
Любые вопросы по решению задач задавайте в чате учебной группы.
