O que é o erro Uncaught TypeError: X is not a function em um código assíncrono?

O erro Uncaught TypeError: X is not a function acontece quando o JavaScript tenta invocar algo como uma função, mas o valor não é uma função.

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.

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

Compartilhe este tutorial: O que é o erro Uncaught TypeError: X is not a function em um código assíncrono?

Compartilhe este tutorial

Continue aprendendo:

Como resolver o erro de TypeError: Converting circular structure to JSON?

O erro `TypeError: Converting circular structure to JSON` ocorre quando você tenta converter um objeto que contém uma referência circular para JSON.

Tutorial anterior

Como evitar o erro TypeError: Cannot read property 'X' of undefined quando manipulando arrays?

O erro `TypeError: Cannot read property 'X' of undefined` ocorre ao tentar acessar uma propriedade de um valor `undefined`. Quando isso acontece em arrays, pode ser devido a elementos não definidos ou indexação errada.

Próximo tutorial