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

209
Views
Solicitudes http secuenciales de Angular2 en un bucle usando un servicio

Básicamente lo que quiero es algo como esto:

 this.accounts.forEach(account=> { this.myService.sendMessage("hello", account).subscribe( success => { if(success) updateProgress... }) }

El problema de este código es que ejecuta todo de forma asíncrona sin esperar la petición anterior. Estaba buscando soluciones usando merge y flatMap pero estoy confundido. Me gustaría esperar a que se complete la solicitud antes de pasar a la siguiente iteración. Esto causa un problema si quiero agregar una barra de progreso.

Solución:

Basándome en las otras respuestas, esto es lo que se me ocurrió:

 let requestList = this.accounts.map((account, index) => { return this.myService.sendMessage("hello", account).map(success => { if (success) { // Update progress here } return success; }); }); Observable.concat(...requestList).subscribe(null, null, () => { console.log("Complete"); });
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

La operación Concat secuenciará sus solicitudes:

 let accounts = ['1', '2', '3', '4' ]; var i = 8000; let obsList$= accounts.map(x=> { i = i - 1000; return Rx.Observable.of(x).delay(i); }); Rx.Observable.concat(...obsList$) .subscribe(x=>console.log(x))
  1. mapear cuentas para crear una matriz de Observables. Agregue un retraso a cada uno para asegurarse de que los primeros sean los más lentos (para asegurarse de que la secuencia funcione).
  2. El operador Concat acepta una secuencia de observables. entonces use ... (operador de propagación) para convertir la matriz
  3. use el operador concat para asegurarse de que el próximo observable se emita solo cuando se complete el anterior.
over 4 years ago · Santiago Trujillo Report

0

Aquí hay una técnica de muestra que puede funcionar para usted.

 // create an array of promise/resolves that will sequence the calls let resolveArray: Array<(value: boolean) => void> = new Array[this.accounts.length]; this.accounts.forEach((account, index) => { new Promise<boolean>((resolve, reject) => { // add the promise to the array. resolveArray[index] = resolve; }).then(result => { this.myService.sendMessage("hello", account).subscribe( success => { if(success) // updateProgress... // when finished, resolve the next promise in the array if (index < this.resolveArray.length) { this.resolveArray[index + 1](true); } }) }); }); // resolve the first promise to start the resolve sequence. resolveArray[0](true);

Esto funciona mediante la creación de una serie de promesas que luego activan su suscripción a medida que finaliza cada una.

over 4 years ago · Santiago Trujillo 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!