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.
Como evitar o erro TypeError: X is not a function em JavaScript Promises
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()
oucatch()
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