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

141
Visualizações
Saber cuantas promesas quedan pendientes

Mi problema es el siguiente :

Tengo una serie de identificaciones que necesito asignar a algunas identificaciones de base de datos mediante una solicitud HTTP a mi API como HTTP GET /foo/{id}

Necesito esperar a que todos los valores muestren los datos en mi aplicación

Actualmente estoy haciendo esto de la siguiente manera

 async getValuesByIds({}, ids){ const valuesPromise = ids.map(async (id) => this.$axios.$get(`/foo/${id}`)) return Promise.all(valuesPromise) }

Y en el código antes de imprimir los valores:

 this.loading = true this.getLeadsValuesByIds(idsArray).then(data => { this.loading = false this.values = data })

El código funciona bien, pero tarda un poco en ejecutarse si tengo muchas identificaciones.

En general, la primera solicitud finaliza en aproximadamente 0,5 segundos y, según la cantidad de solicitudes, la última puede durar entre 4 y 5 segundos.

Mi objetivo aquí es mostrar un texto de carga que informe al usuario cuántas solicitudes quedan y cuántas se han realizado.


Aquí hay un breve ejemplo usando la API jsonPlaceHolder.

Básicamente, lo que quiero tener es en lugar de loading.. El número de solicitudes restantes (como {n} / 99 loaded

 const loadData = () => { const ids = Array.from({length: 99}, (_, i) => i + 1) updateDataText('loading....') const dataPromise = ids.map(async(id) => { const post = await axios.get(`https://jsonplaceholder.typicode.com/posts/${id}`) return post.data }) Promise.all(dataPromise).then(res => { updateDataText(JSON.stringify(res)) }) } const updateDataText = (text) => { const div = document.getElementById('dataText') div.innerText = text }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.27.2/axios.min.js"></script> <button onclick="loadData()">LoadData</button> <p id="dataText"></p>


Nota : estoy usando Nuxt, no sé si eso cambia algo.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Podrías usar una etiqueta <progress> como esta

También he añadido a bordo y mostrador terminado si lo prefieres.

 const loadData = () => { const ids = Array.from({length: 99}, (_, i) => i + 1) let nStarted = 0, nFinished=0; const inflight = document.getElementById('inflight'); const finished = document.getElementById('finished'); const progress = document.getElementById('progress'); progress.max = ids.length; updateDataText('loading....') const dataPromise = ids.map(async(id) => { nStarted++; inflight.textContent = nStarted - nFinished; const post = await axios.get(`https://jsonplaceholder.typicode.com/posts/${id}`) progress.value++; nFinished++; finished.textContent = nFinished; inflight.textContent = nStarted - nFinished; return post.data }) Promise.all(dataPromise).then(res => { updateDataText(JSON.stringify(res, null, 4)) }) } const updateDataText = (text) => { const div = document.getElementById('dataText') div.innerText = text }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.27.2/axios.min.js"></script> <button onclick="loadData()">LoadData</button> <progress id="progress" value=0></progress> <div>In Flight: <span id="inflight"></span></span> <div>Finished: <span id="finished"></span></span> <pre id="dataText"></pre>

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