Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

484
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!