1
resposta

Por que a contagem está sendo pausada e não zerada?

Eu sei que o objetivo do código é pausar a contagem e não zerá-la quando apertamos o botão para pausar, mas estou tentando entender o porquê disso acontecer.

Se a função iniciarOuPausar chama a função zerar, da seguinte forma:

    if(intervaloId){
        zerar()
        return
    }
    intervaloId = setInterval(contagemRegressiva, 1000)
}

e a função zerar é a seguinte:

function zerar() {
    clearInterval(intervaloId) 
    intervaloId = null
}

Eu não consigo entender por que está pausando em vez de zerar a contagem. Afinal, está puxando o clearInveral no intervaloId e redefinindo o intervaloId para null. Isso acontece toda vez que o botão é clicado, certo? Além disso, depois do if que chama o zerar() é redefinido novamente o setInterval pra 1000 (a menos que o return impeça essa parte do código de ser executada, não entendi essa parte muito bem), mas se isso explicar o acontecimento, por que a contagem não recomeça dos 5? E onde está sendo armazenado onde o temporizador parou? Ficou tudo mal explicado, honestamente. Alguém poderia me explicar e me ajudar a entender melhor esse comportamento?

1 resposta

Olá, Dafany. Tudo bem?

Pelo que você descreveu, a função iniciarOuPausar() verifica se existe um intervaloId ativo. Se houver, ela chama a função zerar(), que por sua vez, usa clearInterval(intervaloId) para parar a execução do intervalo e define intervaloId como null. Isso efetivamente pausa o temporizador, mas não zera o valor de tempoDecorridoEmSegundos, que é a variável que controla o tempo no temporizador.

A função zerar() não redefine o valor de tempoDecorridoEmSegundos para o seu valor inicial, ela apenas interrompe o intervalo. Então, o valor de tempoDecorridoEmSegundos permanece no último valor antes da pausa, e não é reiniciado para um valor inicial como 5, por exemplo. Isso explica por que a contagem não recomeça do início quando você clica novamente para iniciar.

Quanto ao return na função iniciarOuPausar(), ele é usado para sair da função imediatamente após a chamada de zerar() se intervaloId for verdadeiro (ou seja, se o temporizador estiver ativo). Isso impede que o código posterior na função seja executado, que seria reiniciar o temporizador. Então, a contagem não recomeça automaticamente após ser pausada.

Um abraço e bons estudos.