Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

207
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!