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

205
Vistas
Axios HTTP llama en canalización sin anidar

Necesito realizar una serie de llamadas HTTP a la API externa como parte de la inicialización de mi back-end de Node.js (recopilar datos de la API externa e inicializar los datos locales). Idealmente algo como esto

 function callOne() {...} function callTwo(input) {...} function callThree(input) {...} result1 = callOne(); result2 = callTwo(result1); result3 = callThree(result2);

con cada paso separado del otro.

La solución sencilla con .then() anidado garantiza la secuencia de canalización, pero no me parece muy agradable (mala legibilidad, difícil de depurar, gestión complicada de errores con .catch() en cada paso...). Traté de seguir el patrón async/await, algo como esto:

 ... function async callOne() { const promise = await axios.get(url1); return promise.data; } function async callTwo(params) { const promise = await axios.get(url2,params); return promise.data; } function async callThree(data) { const promise = await axios.get(url3,params); return promise.data; } result1 = callOne(); result2 = callTwo(result1); result3 = callThree(result2); console.log(result3); ...

pero de alguna manera no funcionó (. Los datos se especifican en una Promesa pendiente, lo que conduce a la "propiedad del objeto indefinido"). ¿Qué tiene de malo el ejemplo anterior? ¿Cuál es el propósito de esperar si aún devuelve una Promesa pendiente? ¿Cómo podría hacer que la función realmente devuelva el valor final?

--Tomás

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

0

Cada función async siempre devuelve una Promise . Como no usa await o .then() al llamar a las tres funciones, no se esperan entre sí. Deberías hacerlo así:

 async function callApi(){ const result1 = await axios.get(url1) const result2 = await axios.get(url2, result1.data) const result3 = await axios.get(url3, result2.data) }

Lo mismo también se aplicaría si desea mantener las funciones.

 result1 = await callOne(); result2 = await callTwo(result1); result3 = await callThree(result2);

Solo tenga en cuenta: para usar la palabra clave await , debe estar dentro de una función marcada como async .

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