es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
    });
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que no estás devolviendo nada desde la función checkAuth. La función checkAuth debe devolver el resultado de la llamada fetch, que es una Promesa. Puedes solucionar este problema agregando una declaración return a la función checkAuth, como se muestra a continuación:

    export const checkAuth = (accessToken) => {
    const url = 'https://example/user-profile';
        console.log("Estamos en la función externa");
        return 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 != 'Unauthorized')
                {
                    return true;
                }
                else{
                    return false;
                }
        })
    }
    

Comments are closed.