No começo da aula o instrutor nos ensina a como solucionar o bug de termos mais de um setInterval() rodando ao mesmo tempo e incrementando o timer, usando essa lógica
const moment = require('moment');
let segundos;
let timer;
module.exports = {
iniciar(el) {
let tempo = moment.duration(el.textContent);
segundos = tempo.asSeconds();
// removendo o setInterval anterior
clearInterval(timer);
timer = setInterval(() => {
segundos++;
el.textContent = this.segundosParaTempo(segundos);
}, 1000);
}, parar() {
}, segundosParaTempo(segundos) {
return moment().startOf('day').seconds(segundos).format("HH:mm:ss");
}
Mas qual o ponto de limparmos o intervalo toda vez que começamos, se logo depois nós preenchemos a função parar com um clearInterval() ?
// timer.js
const moment = require('moment');
let segundos;
let timer;
module.exports = {
iniciar(el) {
let tempo = moment.duration(el.textContent);
segundos = tempo.asSeconds();
// removendo o setInterval anterior
clearInterval(timer);
timer = setInterval(() => {
segundos++;
el.textContent = this.segundosParaTempo(segundos);
}, 1000);
}, parar() {
clearInterval(timer);
}, segundosParaTempo(segundos) {
return moment().startOf('day').seconds(segundos).format("HH:mm:ss");
}
}
Quando clicamos para parar ele já limpa o timer anterior, não tem porque limparmos novamente na função iniciar, eu mesmo fiz meu código desta forma:
const moment = require('moment')
let segundos;
module.exports = {
iniciar (el) {
let tempo = moment.duration(el.textContent)
segundos = tempo.asSeconds()
timer = setInterval(() => {
segundos++
el.textContent = moment().startOf('day').seconds(segundos).format('HH:mm:ss')
}, 1000)
},
parar () {
clearInterval(timer)
}
}
e não tive nenhum problema pois o parar() já limpa o timer para nós