Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Comportamento setInverval

Gostaria de uma explicação sobre o comportamento do comando setInverval para caso abaixo:

function inicializaCronometro(){
    let tempo = $('#tempo').text();
    console.log('Inicio');
    campo.one('focus',function(){
        let cronometro = setInterval(function(){  
            tempo--;
            $('#tempo').text(tempo);
            if(tempo==0){
                campo.attr('disabled',true);
                console.log('fim do intervalo'); //deveria ser executado após 'Inicio'
                clearInterval(cronometro);
            }
        },1000)
        console.log('Fora do intervalo');    
    })
}

Ao rodar este código o console irá printar nesta ordem:

Inicio
Fora do intervalo
fim do intervalo

Ou seja, mesmo estando após o comando setInterval o console.log('Fora do intervalo') está sendo executado antes, o que caracteriza este comportamento?

1 resposta
solução!

Fala ai Leonardo, tudo bem? Nesse caso vai envolver alguns conceitos mais complexos do JavaScript, mas, vou tentar resumir.

O setInterval é uma função que vai ser executada de forma assíncrona, ou seja, a chamada dela será postergada até que todo código síncrono do conexto seja executado.

Ai depois, o JavaScript vai para as execuções assíncronas.

Dá uma lida nesse artigo: https://blog.matheuscastiglioni.com.br/desconstruindo-a-web-pilha-de-execucao-do-javascript/

Espero ter ajudado.