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.

Solicitud Axios devuelve objeto Promise

No estoy seguro por qué cuando cierro sesión en el precio después de ejecutar el método fetchPrice(), me devuelve un objeto de promesa en lugar de precio. ¡Por favor ayuda! 🙂

async function fetchPrice() {
await axios
.get(assetData(selectedAsset))
.then((response) => {
return response.data.market_data.current_price.eur;
})
.catch((error) => console.log(error.response.data.error));
}

useEffect(() => {
let price = fetchPrice();
console.log(“Precio del activo: ” + price);

let assetTotal = Number(cost) / Number(price);
setAssetAmount(assetTotal);
}, [selectedAsset]);

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que fetchPrice() devuelve una promesa en lugar del valor del precio. Las funciones asíncronas como fetchPrice() necesitan ser manejadas con .then() o await para acceder al valor resuelto. Debido a que fetchPrice() es una función asíncrona, necesita esperar a que la solicitud axios.get() devuelva una respuesta antes de resolver la promesa y devolver un valor.

    Para solucionar el problema, puede usar .then() para acceder al valor resuelto o usar await para esperar el valor resuelto antes de continuar con la ejecución del código.

    Usando .then():

    async function fetchPrice() {
      return axios
        .get(assetData(selectedAsset))
        .then((response) => {
          return response.data.market_data.current_price.eur;
        })
        .catch((error) => console.log(error.response.data.error));
    }
    
    useEffect(() => {
      fetchPrice()
        .then((price) => {
          console.log("Precio del activo: " + price);
          let totalActivo = Number(cost) / Number(price);
          setAssetAmount(totalActivo);
        });
    }, [selectedAsset]);
    

    Usando await:

    async function fetchPrice() {
      try {
        const response = await axios.get(assetData(selectedAsset));
        return response.data.market_data.current_price.eur;
      } catch (error) {
        console.log(error.response.data.error);
      }
    }
    
    useEffect(() => {
      async function getPrecio() {
        let precio = await fetchPrice();
        console.log("Precio del activo: " + precio);
        let totalActivo = Number(cost) / Number(precio);
        setAssetAmount(totalActivo);
      }
      getPrecio();
    }, [selectedAsset]);
    

    En ambos casos, fetchPrice() devuelve una promesa que se resuelve al valor del precio. Usar .then() o await accederá al valor del precio resuelto y le permitirá registrarlo y usarlo.

Comments are closed.