es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rxjs: Cómo suscribir solo una vez después de múltiples servicios http.

Tengo un problema con los operadores de rxjs. Tengo un observable de una matriz de strings.

role$: Observable<string[]>;

Creé una función y necesito utilizar todos esos strings para llamar a un servicio http usando cada string como parámetro.

getDetails() {
  this.role$.pipe(concatMap(role =>{
    return this.myService.getDetails(role)
  })).subscribe(res => {
    console.log(res)
  })
}

Escribí esta función pero necesito completar todas las llamadas http antes de la suscripción. Necesito completar todas las llamadas y en la suscripción tengo que crear una lógica solo una vez. En la función que escribí tengo múltiples console.log basados en el número de llamadas al servidor que hago. Solo quisiera una respuesta que contenga una matriz de respuestas de cada llamada al servidor.</string[]>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para completar todas las llamadas http antes de la suscripción y devolver una sola respuesta que contenga un array de respuestas de cada llamada al servidor, se puede utilizar el operador forkJoin.

    Aquí hay un ejemplo de cómo modificar su código para lograr esto:

    getDetails() {
      this.role$.pipe(
        concatMap((role) => this.myService.getDetails(role)),
        forkJoin()
      ).subscribe((responses) => {
        console.log(responses);
        // Cree aquí la lógica que necesite a partir del array de respuestas
      });
    }
    

    En este código actualizado, se utiliza el operador concatMap para asignar cada cadena en el observable role$ a una llamada http. El operador forkJoin espera a que todas las llamadas http se completen antes de devolver una sola respuesta que contenga un array de respuestas de cada llamada al servidor.

    En la suscripción, ahora puede crear la lógica que necesita a partir del array de respuestas, sabiendo que todas las llamadas http están completas.

Comments are closed.