Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Muita gente ainda se perde na hora de usar funções assíncronas em JavaScript, especialmente com setTimeout. A confusão maior costuma estar na forma de passar a callback, e é aí que muitos acabam tendo a execução da função antecipada ou atrasada de forma inesperada.
Quando se usa setTimeout com uma função, a ideia é que ela seja executada após um determinado tempo de atraso. No entanto, há uma armadilha comum: passar a função com os parênteses, como em setTimeout(playNote(currentaudio.id, n), delay). Nesse caso, a função playNote é executada imediatamente, e o resultado da execução é passado ao setTimeout. Isso gera um efeito de execução instantânea, ignorando o atraso.
Por outro lado, passar uma string, como em setTimeout('playNote('+currentaudio.id+', '+noteTime+')', delay), faz com que o JavaScript avalie essa string após o tempo estipulado, executando o código contido nela. Isso funciona, mas é uma prática altamente desaconselhável por motivos de segurança e manutenção.
A resposta técnica é que, ao passar uma string para setTimeout, ela será avaliada como código a ser executado após o atraso, semelhante ao uso de eval(). Essa abordagem não é recomendada, pois abre brechas de segurança e torna o código mais difícil de manter. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Quando se passa uma função diretamente, como em setTimeout(playNote, delay), o que se está fazendo é passar uma referência de função. No entanto, se precisar passar argumentos, o padrão comum é envolver a chamada em uma função anônima: setTimeout(function() { playNote(currentaudio.id, noteTime). }, delay). . Assim, a função só será executada após o atraso, com os argumentos corretos. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
setTimeout(function() { playNote(currentaudio.id, noteTime). }, delay).
Outra alternativa é usar arrow functions, que deixam o código mais limpo:
setTimeout(() => playNote(currentaudio.id, noteTime), delay). Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
O maior erro é esquecer de envolver a chamada da função em uma função anônima. Isso faz com que a função seja executada imediatamente, e o setTimeout não tenha efeito. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Outro erro é tentar passar a função com os argumentos diretamente, como setTimeout(playNote(currentaudio.id, noteTime), delay), que executa de imediato. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Por fim, usar strings como argumentos é uma prática que deve ser evitada. Além do risco de injeção de código, ela também prejudica a legibilidade e depuração. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
A chave para entender o funcionamento do setTimeout é perceber que a diferença entre passar uma função e uma expressão que a avalia é enorme. Passar uma função garante que ela será executada só após o atraso, enquanto passar uma expressão ou string causa execução imediata ou avaliação instantânea. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
No dia a dia de desenvolvimento, a prática recomendada é sempre envolver suas chamadas em funções anônimas ou arrow functions. Assim, você evita bugs difíceis de detectar e mantém seu código mais seguro e compreensível. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Carregando comentários...