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

482
Vistas
tap() vs subscribe() para establecer una propiedad de clase

Soy muy nuevo en rxjs y me preguntaba si está bien configurar una propiedad de clase canalizando la transmisión y tocándola, o debería hacerlo en la suscripción. Para mí, de cualquier manera funciona, solo me pregunto si está bien hacerlo como mejor me parezca o si hay algo que desconozco.

Código mecanografiado que demuestra ambas formas:

 export class ViewComponent implements OnInit { applicant = {}; constructor(public route: ActivatedRoute, private store: Store<any>) {} ngOnInit() { this.route.paramMap.pipe( switchMap(params => this.store.select(state => state.applicants.entities[params.get('id')])), tap(applicant => this.applicant = applicant) ).subscribe(); } }

contra

 export class ViewComponent implements OnInit { applicant = {}; constructor(public route: ActivatedRoute, private store: Store<any>) {} ngOnInit() { this.route.paramMap.pipe( switchMap(params => this.store.select(state => state.applicants.entities[params.get('id')])) ).subscribe(applicant => this.applicant = applicant); } }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Buena pregunta. En el código fuente del operador tap , este comentario lo resume bastante bien:

Este operador es útil para depurar sus Observables para obtener los valores correctos o realizar otros efectos secundarios.
Nota: esto es diferente a una subscribe en el Observable. Si el Observable devuelto por do no está suscrito, los efectos secundarios especificados por el Observador nunca ocurrirán. por do tanto, simplemente espía la ejecución existente, no activa una ejecución como lo hace subscribe .

Cualquier efecto secundario que pueda ejecutar en un tap probablemente también se pueda colocar en el bloque de subscribe . La subscribe indica su intención de usar activamente el valor de la fuente, ya que dice "cuando este observable emite, quiero guardar su valor en la variable de los applicants ". El operador de tap está allí principalmente para la depuración, pero se puede usar para ejecutar efectos secundarios.

En general, favorezca el bloque de subscribe para ejecutar efectos secundarios, use tap para depurar, pero tenga en cuenta que tap puede hacer más si lo necesita.

over 4 years ago · Santiago Trujillo Denunciar

0

tap es útil cuando tienes el observable separado de su suscriptor. Si tiene una clase que expone un observable, puede usar tap para implementar efectos secundarios que esta clase necesita ejecutar cuando alguien está escuchando el observable. Por otro lado, cuando te suscribes desde otra clase, puedes implementar efectos secundarios desde el punto de vista del suscriptor, usando subscribe .

Clase con el observable:

 public dummyObservable: Observable<number> = from([1, 2, 3, 4, 5]).pipe( // Side effects, executed every time I emit a value // I don't know which side effects implements who subscribes to me tap( n => console.log("I'm emitting this value:", n) ) );

Clase con la suscripción:

 ngOnInit(): void { this.dummyService.dummyObservable.subscribe( // Side effects, executed every time I receive a value // I don't know which side effects implements the observable data => console.log("I'm receiving this value: ", data) ); }
over 4 years ago · Santiago Trujillo Denunciar

0

Michael Hladky sugiere que ponga todos los efectos secundarios en el operador del grifo y explica por qué aquí .

Creo que, en general, es una buena idea hacerlo porque, como dice Michael, puede combinar muchos observables y crear una sola suscripción para todos ellos.

No sé si esto mejora el rendimiento o no, pero definitivamente lo hace más fácil cuando desea darse de baja para tener solo una suscripción. Darte de baja es algo que siempre debes hacer para evitar posibles pérdidas de memoria u otros comportamientos extraños.

Otra ventaja de este enfoque es que puede pausar, reanudar o completar fácilmente un grupo de observables al canalizarlo a través de operadores como filter o takeWhile, o cambiarlo a través de otro observable como este:

 const allMergedObservables$ = merge(obs1, obs2, obs3); const play$ = new Subject(); play$.asObservable().pipe( switchMap(bool => bool ? allMergedObservables$ : EMPTY) ).subscribe(); // Putting 'true' into the play stream activates allMergedObservables$. play$.next(true); // Something happens that makes you want to pause the application, // for instance the user opens the print dialog box, // so you issue 'false' in the play stream which in turn stops the // inner subscription of allMergedObservables$: play$.next(false);

Sin embargo, depende de usted y del estilo de programación que prefiera.

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