O erro Uncaught TypeError: X is not a function
em códigos assíncronos é um problema comum quando tentamos chamar algo como uma função que não é uma função. Esse erro pode ocorrer em várias situações, mas uma das mais comuns é quando um callback não foi corretamente definido ou passado para a função. Um exemplo desse erro em um contexto assíncrono pode ser o seguinte:
setTimeout(function() {
let callback;
callback(); // Uncaught TypeError: callback is not a function
}, 1000);
Aqui, a variável callback
não foi definida como uma função e, portanto, ao tentar invocar callback()
, o JavaScript lança o erro mencionado. A causa do erro é que estamos tentando invocar uma variável que não contém uma função.
Como corrigir?
Para corrigir esse erro, você deve garantir que a variável seja atribuída a uma função antes de ser invocada. Veja o exemplo abaixo:
setTimeout(function() {
let callback = function() { console.log('Callback executado!'); };
callback(); // 'Callback executado!'
}, 1000);
Neste caso, a variável callback
foi corretamente definida como uma função, e o erro é evitado.
Como evitar o erro Uncaught TypeError: X is not a function em código assíncrono
Esse erro é frequentemente encontrado em códigos assíncronos, como callbacks e promessas. A principal causa é a tentativa de invocar algo como uma função, quando o valor real não é uma função. Em sistemas assíncronos, é crucial garantir que todas as variáveis e funções sejam corretamente definidas antes de invocar qualquer callback ou função.
Algumas aplicações:
- Verifique sempre se o callback ou a função assíncrona foi corretamente definida antes de chamá-la.
- Use verificações como
typeof callback === 'function'
para garantir que você está passando uma função válida. - Se estiver trabalhando com promessas, utilize
.then()
para garantir que as funções estão sendo encadeadas corretamente.
Dicas para quem está começando
- Quando passar funções para callbacks ou promessas, sempre verifique se são realmente funções.
- Se você não definir corretamente a função, o erro
Uncaught TypeError: X is not a function
ocorrerá. - Use o
console.log
para depurar o valor da variável antes de chamá-la, e verifique se é uma função.
Contribuições de João Gutierrez