Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

251
Vistas
actualice el método Observable con if/else para usar el estilo reactivo

Tengo el siguiente método que me gustaría actualizar a un estilo más reactivo. contiene lógica if/else. He leído que debería poder descomponerse en flujos, aplicar un filtro a cada flujo y volver a fusionar los flujos, pero no estoy seguro de cómo aplicar esto al siguiente ejemplo.

El método de muestra a continuación pasa un indicador de exclusión. el método llama primero a un servicio http para obtener una matriz. si el indicador de exclusión es verdadero, entonces debemos llamar a otro servicio http para obtener algunos datos de configuración que se necesitan para filtrar la matriz.

Gracias por tu ayuda.

 method A(boolean excludeSomeCatagory ) : Observable<Species[]> { return Observable.create((observer) => { getSomeHttpData().subscribe((species: Species[]) => { if(!excludeSomeCatagory){ observer.next(species); observer.complete(); } else { getSomeConfigDataFromHttp().subscribe( (data) => { filteredArray: Species[] = applyFilter(data, species); observer.next(filteredArray); observer.complete(); }); } }); } }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Algo como esto funcionaría:

 public A(excludeSomeCategory: boolean): Observable<Species[]> { return getSomeHttpData().pipe( switchMap(species => { return !excludeSomeCategory ? of(species) : getSomeConfigDataFromHttp().pipe( map(data => applyFilter(data, species)) ) }) ); }

La idea general es que comience su transmisión con un observable de su llamada http, luego canalice su emisión en la forma que necesita. Rara vez tendrá la necesidad de crear un observable usando Observable.create() porque rxjs ofrece muchos operadores estáticos que manejan muchos casos de uso comunes.

También desea evitar las suscripciones que no puede limpiar fácilmente ( suscripciones anidadas ).

Entonces, si simplemente getSomeHttpData(); esto sería de tipo Observable<Species[]> .

 public A(): Observable<Species[]> { return getSomeHttpData(); }

Obviamente, tiene algo más de lógica que desea hacer para realizar potencialmente una llamada api adicional, por lo que canalizamos la emisión ( Species[] ) a switchMap , que se suscribirá a un "observable interno" para usted y emitirá sus emisiones.

Entonces, dentro de switchMap , desea devolver un observable. En su caso, tiene una condición que simplemente puede devolver la emisión de recepción O realizará otra llamada http.

En el caso de que desee emitir la emisión anterior, usamos of para crear un valor observable a partir del valor simple.

En el otro caso, simplemente devolvemos la llamada a getSomeConfigDataFromHttp() , que a su vez devuelve un observable. Como desea transformar un poco los datos, usamos el map para manejar eso.

over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente devuelva el Observable directamente y use un SwitchMap .

 method A(boolean excludeSomeCatagory ) : Observable<Species[]> { return getSomeHttpData().pipe( switchMap((species) => { if(!excludeSomeCatagory){ return of(species) } else { return getSomeConfigDataFromHttp().pipe( map(data => { return applyFilter(data, species) }) ) } }) ) }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda