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

178
Visualizações
NodeJs espera hasta que finalicen todas las llamadas en bucle

Tengo el siguiente código en el nodo (principiante), quiero llamar a una función después de que todo el código se haya ejecutado en el ciclo, sé que tengo que usar promesas, pero no sé cómo aplicarlas en esta situación . El código se ha simplificado. Muchas gracias.

 const axios = require('axios').default; axios.post('url', { params: {} }).then(response=>{ var objResponse = response.data Object.keys(objResponse).forEach(function (key){ axios.post('url', { params: {} }).then(response=>{ var n=0; getCode(n); }) }) **finishFunction**() }) function getCode(n) { axios.post('url', { params: {} }).then(response=>{ if(response.data){ if (response.data.code) { getData(); }else{ if (n < 10) { n++; getCode(n); } else { getTimeout(); } } } }) } function getTimeout() { axios.post('url', { params: {} }) } function getData() { axios.post('url', { params: {} }).then(response=>{ console.log('finished one loop'); }) }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La mejor manera de lograr lo que desea es usar async/await con un bucle for normal.

Aquí hay un ejemplo de lo que quiero decir. Puedes ajustarlo a tus necesidades:

 async doSomeStuff() { const results = [] const res1 = await axios.post('url', { params: {} }) // assuming res1 is an Array for (let i=0; i < res1.length; i++) { const result = await axios.post('url2', { params: {} }) results.push(result) } return results }

También puede llamar a otras funciones asíncronas dentro del ciclo como lo está haciendo.

over 4 years ago · Santiago Trujillo Relatório

0

Puede usar Promise all y map juntos, junto con async/await

 async function myFunction(){ const result = await axios.post('url'); const keys = Object.keys(result.data); const requests = keys.map((key, i) => axios.post('url')/*chain more if u need*/) const allResults = await Promise.all(requests); // All done run your function below }
over 4 years ago · Santiago Trujillo Relatório

0

Si está satisfecho con que cada elemento del ciclo se ejecute al mismo tiempo, puede usar una matriz de promesas y esperar a que finalice todo en la matriz. Luego, solo tiene que agregar promesas a sus funciones, lo que llevará una cantidad de tiempo desconocida para ejecutarse. Algo como esto podría ayudarlo a comenzar:

 const axios = require('axios').default; axios.post('url', { params: {} }).then(response=>{ var objResponse = response.data var proms = []; Object.keys(objResponse).forEach(function (key){ proms.push( axios.post('url', { params: {} }).then(response=>{ var n=0; return getCode(n); }) ) }) var items = Promise.all(proms); items.then(function (results) { // **finishFunction**() }); }) function getCode(n) { return new Promise(function (resolve, reject) { axios.post('url', { params: {} }).then(response=>{ if(response.data){ if (response.data.code) { getData(); }else{ if (n < 10) { n++; getCode(n).then(data => { return resolve(data) }); } else { getTimeout().then(data => { return resolve(data) }); } } } }) }) } function getTimeout() { return new Promise(function (resolve, reject) { axios.post('url', { params: {} }) return resolve() }) } function getData() { return new Promise(function (resolve, reject) { axios.post('url', { params: {} }).then(response=>{ console.log('finished one loop'); return resolve(response) }) }) }
over 4 years ago · Santiago Trujillo 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