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

256
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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