Como resolver o erro de TypeError: X is not a function em JavaScript Promises?

Esse erro ocorre quando você tenta invocar algo que não é uma função dentro de uma Promise, como um valor ou objeto inesperado.

O erro TypeError: X is not a function em JavaScript Promises ocorre quando você tenta usar algo como uma função, mas o valor em questão não é realmente uma função. Esse erro é frequentemente causado por chamadas de métodos incorretas ou por retornar valores inesperados dentro de uma Promise.

Aqui está um exemplo comum do erro:

const promise = new Promise((resolve, reject) => {
  resolve(42);
});
promise.then(42()); // TypeError: 42 is not a function

No código acima, tentamos chamar 42() como uma função, mas 42 é um número, não uma função. Esse é o motivo do erro. Para corrigir isso, você deve garantir que está chamando uma função, e não um valor não invocável.

Exemplo corrigido:

const promise = new Promise((resolve, reject) => {
  resolve(() => { console.log('Hello'); });
});
promise.then(callback => callback()); // Correto

Aqui, passamos uma função como valor resolvido pela Promise, e depois a chamamos corretamente.

Como corrigir?

Certifique-se de que você está tentando invocar apenas funções quando usa algo como then(), catch(), ou qualquer outra função que espera um callback. Além disso, valide o tipo do valor que você está passando antes de invocar qualquer função.

Esse erro é comum ao trabalhar com Promises e pode ser evitado ao garantir que o valor retornado em uma Promise seja sempre uma função ou algo que seja válido para invocar. Para isso, sempre valide os tipos dos valores em suas Promises.

Algumas aplicações:

  • Sempre verifique se os valores passados em then() ou catch() são funções.
  • Utilize typeof para validar se algo é uma função antes de chamá-lo.
  • Ao passar funções em Promises, assegure-se de que está fazendo isso corretamente, para não causar erros em callbacks.

Dicas para quem está começando

  • Sempre use typeof para verificar se algo é uma função antes de tentar invocar.
  • Se você estiver lidando com funções dentro de Promises, garanta que está passando uma função válida.
  • Compreender como as Promises funcionam e como as funções de callback são passadas pode evitar esse tipo de erro.

Contribuições de Ricardo Vasconcellos

Compartilhe este tutorial: Como resolver o erro de TypeError: X is not a function in JavaScript Promises?

Compartilhe este tutorial

Continue aprendendo:

O que significa o erro TypeError: Cannot read property 'X' of undefined in async functions?

Esse erro ocorre quando você tenta acessar uma propriedade de um valor que é `undefined` dentro de funções assíncronas.

Tutorial anterior

O que causa o erro ReferenceError: X is undefined e como corrigi-lo?

Esse erro ocorre quando você tenta acessar uma variável que não foi definida no escopo atual.

Próximo tutorial