Angular - Resolver subscribes dentro de un forEach

tOWERR

Buenas amig@s, vengo a recurrir a vuestra ayuda.
Tengo un array de productos, necesito que por cada producto llamar a un método del servicio que me reactiva el producto pasándole el producto. A su vez quiero ir mostrando el número de productos que se van "reactivando" según va pasando el bucle (algo como 1/5, 2/5, etc.).
¿Me puede ayudar alguien please?

Zerokkk

Como no muestres el código relacionado, mal vamos.

NoRelaX

¿Y cuál es el error? ¿Y cómo quieres mostrar los productos activados?

Debería ser algo así

    arrayProductos.forEach(
      producto => productoService.reactivar(producto).subscribe(result => {
         // respuesta
      }));   
1 respuesta
tOWERR

El código es como el de #3
Pero el problema de ese código es que el bucle va iterando sin resolver uno a uno los subscribes. Lo que quiero es que itere el foreach, se resuelva la petición y hasta que no se resuelva la petición no pase a la siguiente iteración. No sé si me explico bien.

1 respuesta
Fyn4r

Ni puta idea de angular pero ese subscribe me juego 5€ a que es asíncrono

NoRelaX

#4 Ah, claro, es asíncrono. Tal vez podrías hacerlo de manera recursiva; en vez de recorrer los propios elementos deberías iterar índices y cuando termine un subscribe llamar a la misma función pero con el índice siguiente, y así sucesivamente.

Tuskus
Observable.of(misProductos)
    .pipe(
        mergeMap(producto => this.miservicio.activoProducto(producto.id))
    )
.subscribe((result) => //incremento mi contador//)

Conviertes tu array en un observable, devuelves por cada producto que tengas un observable con la llamada a tu activación, te suscribes, y ahí incrementas tu contador para mostrar los productos activados, cada vez que resuelve una llamada, se te notificara.
El control de errores ya pa ti xD.
Ni idea de si los operadores de rxjs son así en la versión que tenéis de la librería y si son asi exactamente, lo he hecho un sec sin mirar nada xD.

1 1 respuesta
tOWERR

#7 Gracias. Así me funciona tal cual lo quería.

Usuarios habituales

  • tOWERR
  • Tuskus
  • NoRelaX
  • Fyn4r
  • Zerokkk