Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Funciones asincrónicas de Javascript: la segunda función no espera

Buenos días a todos,

Tengo problemas para entender algunas actividades asincrónicas.

Lo que busco hacer es tomar algunos datos, pasar el valor devuelto a una variable, mostrar esa información (y hacer algunas otras funciones según lo que salga). Este proceso debe poder expandirse a múltiples conjuntos de datos, como pronósticos por hora, pronósticos semanales, información sobre peligro de incendio, etc., y se ejecutará en intervalos.

Revisé la página Promise de MDN junto con numerosas búsquedas aquí para obtener una respuesta, pero no parece hacer clic.

Lo que tengo hasta ahora:

 let weeklyData; let pull; async function pullData(url){ fetch(url).then(res=>res.json()).then((val)=>{pull=val}); } function buildDataSets(){ for(let x = 0; x < pull.properties.periods.length; x++){ weeklyDataSets[x] = pull.properties.periods[x]; } }

Cuando se llaman a mano en la consola, estos se resuelven correctamente. Pull sale como un objeto y buildDataSets() puede ejecutarse. Imagino que es porque hay tiempo suficiente para que se resuelva pullData(url) .

Necesito procesar la respuesta de pullData(url) , por lo que debo asignar su valor de retorno a un objeto.

Lo que puedo decir, debería estar usando algo en el estadio de béisbol de

 Promise.resolve(pullData(url)) .then(()=> buildDataSets());

Esto devuelve un estado pendiente y la extracción permanece sin definir cuando buildDataSets() se desactiva. Sé que necesito extraer los datos, esperar hasta que se completen, luego asignar el valor a extracción si es exitoso. Luego, después de que se haya asignado la extracción, llame a la función buildDataSets() . Agregar un .then() que llama a buildDataSets() tampoco parece funcionar, lo que hace que la extracción no esté definida cuando intenta acceder a los valores.

¿Podría alguien ayudarme a explicar lo que me estoy perdiendo? Siento que estoy mirando la respuesta, pero no puedo verla.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debería devolver un valor de pullData para que otros puedan await (o acceder a él en el controlador then ). Consulte ¿Por qué mi variable permanece inalterada después de modificarla dentro de una función? - Referencia de código asíncrono

Por lo general, no establece una variable no local de una devolución de llamada asincrónica exactamente por lo que ha mencionado. La

Probablemente desee que buildDataSets también devuelva una Promesa.

 async function pullData(url){ return fetch(url).then(res=>res.json())); } async function buildDataSets(){ const pull = await pullData('/url'); const weeklyDataSets = {}; for(let x = 0; x < pull.properties.periods.length; x++){ weeklyDataSets[x] = pull.properties.periods[x]; } return weeklyDataSets; } async function myMain () { const data = await buildDataSets(); console.log({data}); }

Aquí está el mismo código sin usar await s, solo cadenas Promise

 function pullData(url){ return fetch(url).then(res=>res.json())); } function buildDataSets(){ return pullData('/url') .then((pull) => { const weeklyDataSets = {}; for(let x = 0; x < pull.properties.periods.length; x++){ weeklyDataSets[x] = pull.properties.periods[x]; } return weeklyDataSets; }); } function myMain() { return buildDataSets().then((sets) => { console.log({sets}); }); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda