Tengo un archivo js que se usa en un componente React. Lo que estoy tratando de hacer es obtener datos de mi punto final y pasarlos a una variable llamada empleados. Probé diferentes formas de hacerlo, leí sobre async, etc. y no pude descubrir cómo hacerlo, aquí está mi intento:
async function fetchData() { const response = await fetch('https://mocki.io/v1/29b83c0b-1a55-430d-a173-92b3632e04aa'); const data = await response.json(); return data } export const employees = fetchData()¿Cómo puedo pasar mis datos a la variable empleados?
Esencialmente estás pensando en esto de la manera incorrecta. Particularmente en esta declaración:
¿Cómo puedo pasar mis datos a la variable empleados?
La variable es irrelevante. Lo que está exportando es el valor al que hace referencia la variable. En este caso, ese valor es una Promise , y cualquier cosa que lo importe debería await esa Promise .
Pero en el caso de exportar módulos como este, esa estructura no es intuitiva y puede generar errores. El módulo solo debe exportar la funcionalidad y el código consumidor puede invocar esa funcionalidad cuando y donde lo desee.
Así que no invoques la función y exportes la promesa. Exportar la función:
export async function fetchData() { const response = await fetch('https://mocki.io/v1/29b83c0b-1a55-430d-a173-92b3632e04aa'); const data = await response.json(); return data } (Aunque personalmente recomendaría darle un nombre mejor que fetchData . Algo como fetchEmployees parece más descriptivo, dados los employees variables en el código que se muestra).
Luego, consumir código importaría esa función y la usaría para obtener los datos:
import { fetchData } from 'your-module'; // sometime later, either this: const employees = await fetchData(); // do something with employees // or this: fetchData().then(employees => { // do something with employees });Esto mantiene al módulo responsable de una sola cosa, proporcionando al código de consumo la funcionalidad que necesita. El módulo tampoco debería ser responsable de invocar esa funcionalidad, y tratar de hacerlo causará problemas cuando esa funcionalidad sea de naturaleza asíncrona.