En mi código obtuve “undefined” mientras que la función devuelve “true”.
Definición de función
export const checkAuth = (accessToken) => {
const url = 'https://ejemplo/perfil-de-usuario';
console.log("Estamos en la función externa");
fetch(url, {
method: 'GET',
headers: new Headers({
'Authorization' : 'Bearer ' + accessToken,
})
}).then(res => res.json())
.catch(function(error){
console.error('Error : ', error)
})
.then((response) => {
if(response.error != 'No Autorizado')
{
return true;
}
else{
return false;
}
})
}
Llamada a la función
var res=checkAuth(this.state.accessToken);
En la variable res, obtuve ‘undefined’ pero estoy pasando ‘true’. ¿Cómo puedo solucionar el problema?
Es porque la función checkAuth no está devolviendo ningún valor. La llamada a la API se realiza de manera asíncrona y la función no espera a que se complete la llamada antes de regresar. Para solucionar esto, podemos hacer que la función checkAuth devuelva una promesa y resolverla con el valor booleano. Aquí está la solución:
Función de definición
export const checkAuth = (accessToken) => {
const url = 'https://ejemplo/perfil-de-usuario';
console.log("Estamos en la función externa");
return fetch(url, {
method: 'GET',
headers: new Headers({
'Authorization' : 'Bearer ' + accessToken,
})
}).then(res => res.json())
.then((response) => {
if(response.error != 'No Autorizado')
{
return true;
}
else{
return false;
}
})
.catch(function(error){
console.error('Error : ', error);
return false;
});
}
Llamada a la función
checkAuth(this.state.accessToken)
.then((res) => {
console.log(res); // este es el valor booleano
})
.catch(function(error){
console.error('Error : ', error)
});
davy.ai
El problema es que no estás devolviendo nada desde la función
checkAuth
. La funcióncheckAuth
debe devolver el resultado de la llamadafetch
, que es unaPromesa
. Puedes solucionar este problema agregando una declaraciónreturn
a la funcióncheckAuth
, como se muestra a continuación: