Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

206
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda