Hola, estoy tratando de llamar datos desde otra función. La función de llamada es esta,
useEffect(() => { setFetching(true); const fetchMarketData = async () => { const marketData = await getMarketData(page); if (page === 1) { setData(marketData); return setFilteredData(marketData); } else { setFilteredData(data.concat(marketData)); return setData(data.concat(marketData)); } }; fetchMarketData(); if (data != undefined) { if (data.length > 0) setFetching(true); } else { } setFetching(false); }, [page]);Cuando registro marketData, devuelve indefinido. Pero en estas funciones hasta volver da el resultado correcto.
const formatMarketData = (data) =>{ let formattedData = []; data.forEach(item=>{ const formattedItem = { ...item } formattedData.push(formattedItem); }); return formattedData; } export const getMarketData = async (page) =>{ const sending = {"page" : page,}; const response = await fetch("https://us-central1-cnhtest-38661.cloudfunctions.net/getMarketDatas",{ headers: {"Content-Type":"application/json"}, method:"POST", body:JSON.stringify({data:sending}) }).then((res)=>{ res.json().then((r)=>{ return formatMarketData(r.result.data) }) }) }¿Cómo puedo devolver correctamente este valor a la variable marketData de mi función de llamada?
Olvidaste return la primera promise chain interna. Necesitas cambiar
.then((res)=> { res.json().then((r)=> { return formatMarketData(r.result.data) }) })a lo siguiente.
.then((res)=> { return res.json().then((r)=> { return formatMarketData(r.result.data) }) })Aquí hay un fragmento de código actualizado.
const formatMarketData = (data) => { let formattedData = []; data.forEach(item => { const formattedItem = { ...item } formattedData.push(formattedItem); }); return formattedData; } const getMarketData = async (page) => { const sending = {"page" : page}; const response = await fetch("https://us-central1-cnhtest-38661.cloudfunctions.net/getMarketDatas", { headers: {"Content-Type":"application/json"}, method: "POST", body: JSON.stringify({data:sending})}).then((res)=> { return res.json().then((r)=>{ return formatMarketData(r.result.data) }) }) return response } async function printResult() { const result = await getMarketData(1) console.log(result) } printResult()