const EventEmitter = require('events');
class Counter extends EventEmitter {
constructor(timer) {
super();
if (typeof timer === "number" && timer > 0) {
this.start(timer);
}
}
start(timer = 0) {
if (this.intervalId) {
this.stop();
}
this.timer = timer;
this.emit('start', this.timer);
this.intervalId = setInterval(() => {
this.timer -= 1
if (this.timer > 0) {
this.emit('process', this.timer);
} else {
this.stop();
}
}, 1000)
}
stop() {
clearInterval(this.intervalId);
this.intervalId = undefined;
this.emit('end', this.timer);
}
}
const counter = new Counter();
counter.on("start", timer => console.log("start", timer));
counter.on("process", timer => console.log("process", timer));
counter.on("end", timer => console.log("end", timer));
counter.start(10)
start 10
process 9
process 8
process 7
process 6
process 5
process 4
process 3
process 2
process 1
end 0
Коммента́рий (лат. commentārius — заметки, записки, толкование) — пояснения к тексту, рассуждения, замечания о чём-нибудь или в Интернете — к посту (сообщению).
Ремарка (фр. remarque) — замечание автора текста (книги, рукописи, письма), уточняющее или дополняющее какие-либо детали.