Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

183
Visualizações
La búsqueda de consulta API funciona, aunque no devuelve el resultado

Estoy tratando de obtener un valor de una API useEffect:

 useEffect(async() => { try { const result = await getToken(urlSuffix); logger.log('returned') setToken(result); } catch (error) { logger.debug('ERROR: ', error); throw error; } }, [urlSuffix]);

La cuestión es que la función nunca devuelve el token, pero la parte de obtención funciona correctamente (estoy registrando el token). Aquí está la búsqueda de API:

 export const getToken = async ( urlSuffix ) => { try { const url = `https://api_url/api/v1/asset/${urlSuffix}`; const data = await fetch(url, { headers: { 'Accept': 'application/json', 'X-Api-Key': API_KEY, }, method: 'get', timeout: 5000, // 5 secs }); const token = data?.data?.collection?.token; logger.debug('TOKEN: ', token); return token; } catch (error) { logger.debug('TOKEN FETCH ERROR'); } };

El logger.debug al buscar registra el token correcto, pero el logger.log en useEffect nunca registra que los resultados han regresado. ¿Qué impide que getToken devuelva el token ?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Parece que estás usando fetch() como si fuera Axios , que no lo es.

fetch() devuelve una promesa que se resuelve con un objeto de respuesta que no tiene una propiedad data . Creo que lo que quieres en tu función getToken() es esto...

 export const getToken = async (urlSuffix) => { const url = `https://api_url/api/v1/asset/${urlSuffix}`; // FYI - fetch does not support timeouts const res = await fetch(url, { headers: { 'Accept': 'application/json', 'X-Api-Key': API_KEY, }, method: 'GET', }); if (!res.ok) { logger.debug('TOKEN FETCH ERROR'); throw new Error(`${res.status}: ${await res.text()}`) } const data = await res.json() // parse the response stream as JSON const token = data.collection.token; logger.debug('TOKEN: ', token); return token; }

Tampoco debe pasar una función asíncrona a useEffect ya que interrumpe elproceso de limpieza

 useEffect(() => { getToken(urlSuffix).then(setToken) }, [ urlSuffix ]);
about 4 years ago · Juan Pablo Isaza Relatório

0

Tenga en cuenta que usar un try...catch dentro de useEffect es una mala práctica ( ver aquí ).

Pero me parece que configuró su async / await correctamente, por lo que realmente debería funcionar.

Intente agregar la función getToken a las dependencias de su useEffect .

 useEffect(async() => { try { const result = await getToken(urlSuffix); logger.log('returned') setToken(result); } catch (error) { logger.debug('ERROR: ', error); throw error; } }, [urlSuffix, getToken]);

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda