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

392
Visualizações
¿Cómo usar la promesa con el bucle for y la solicitud $ .get?

Esta es la primera vez que uso promesas, así que estoy seguro de que hay errores bastante tontos aquí. Lo que estoy tratando de hacer es enviar una solicitud http en un bucle for.

Al hacer esto sin la promesa, puedo ejecutar bien este bucle y todo funciona correctamente. sin embargo, cuando hago esto con la promesa, solo devuelve un objeto (debe ser múltiple, ya que envía múltiples solicitudes)

este es mi codigo

 function run(o,initialvalue){ const test = new Promise( (resolve,reject) => { const collectionCountUrl = 'https://x.io/rpc/Query?q=%7B%22%24match%22%3A%7B%22collectionSymbol%22%3A%22'+o.name+'%22%7D%2C%22%24sort%22%3A%7B%22takerAmount%22%3A1%2C%22createdAt%22%3A-1%7D%2C%22%24skip%22%3A'+initialvalue+'%2C%22%24limit%22%3A500%7D' promises = [] for(i=0; i < o.count(/*in this case 60, so 3 requests*/); i+= 20){ $.get(collectionCountUrl).success(resolve).fail(reject) // This should be sending multiple of the requests above, correct? ^ } }) test.then(function(data){ console.log(data) // this should return the data from each request? im not sure }) }

Intenté revisar esta publicación para ver si estaba configurando mal el bucle for, pero no creo que lo esté. Promise for-loop con solicitudes Ajax

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

0

Una promesa es para un solo resultado. Debe envolver cada solicitud en una promesa separada (mover la llamada del constructor al ciclo) y almacenar las promesas en una matriz.

Luego, puede usar métodos de agregación como Promise.all (otros son Promise.allSettled , Promise.race y Promise.any ) para obtener una única promesa de una serie de resultados que puede esperar.

Como esto:

 function run(o,initialvalue){ const collectionCountUrl = 'https://x.io/rpc/Query?q=%7B%22%24match%22%3A%7B%22collectionSymbol%22%3A%22'+o.name+'%22%7D%2C%22%24sort%22%3A%7B%22takerAmount%22%3A1%2C%22createdAt%22%3A-1%7D%2C%22%24skip%22%3A'+initialvalue+'%2C%22%24limit%22%3A500%7D' const promises = [] // ^^^^^----+--- don't forget to declare all your variables // vvv--+ for(let i=0; i < o.count(/*in this case 60, so 3 requests*/); i+= 20){ promises.push(new Promise( (resolve,reject) => { $.get(collectionCountUrl).success(resolve).fail(reject) })) } //You've got an array of promises, let's convert it to a single one that resolves when everything's done: const test = Promise.all(promises) test.then(function(data){ //This will run when all the requests have succeeded //`data` is an array of results console.log(data) }) }

Esto funcionará, ¡pero hay una manera aún mejor!

Los objetos $.Deferred de jQuery (como el que obtienes de $.get ) también tienen un método .then() como las promesas, y aunque no es una promesa real , puedes usarla como si lo fuera. Tales objetos se llaman then ables .

Entonces, en lugar de esta cosa...

 promises.push(new Promise( (resolve,reject) => { $.get(collectionCountUrl).success(resolve).fail(reject) }))

... puedes hacer esto:

 promises.push( $.get(collectionCountUrl) )

Entonces, aquí está el código final:

 function run(o,initialvalue){ const collectionCountUrl = 'https://x.io/rpc/Query?q=%7B%22%24match%22%3A%7B%22collectionSymbol%22%3A%22'+o.name+'%22%7D%2C%22%24sort%22%3A%7B%22takerAmount%22%3A1%2C%22createdAt%22%3A-1%7D%2C%22%24skip%22%3A'+initialvalue+'%2C%22%24limit%22%3A500%7D' const promises = [] for(let i=0; i < o.count(/*in this case 60, so 3 requests*/); i+= 20){ promises.push( $.get(collectionCountUrl) ) } //You've got an array of promises, let's convert it to a single one that resolves when everything's done: const test = Promise.all(promises) test.then(function(data){ //This will run when all the requests have succeeded //`data` is an array of results console.log(data) }) }
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