Estoy creando una aplicación Angular y tratando de usar la tubería async
siempre que sea posible para manejar las suscripciones de Observable.
Todavía estoy exactamente seguro de cuándo y por qué debería usarlo, la mayoría de las veces he visto que si no necesito hacer ningún cambio en los datos que vienen, puedo usarlo y mostrar los datos como- es ; pero si necesito hacer algo con cualquier parte de los datos de antemano, debo suscribirme manualmente en mi código mecanografiado y manejar todo allí antes de mostrarlo.
Entonces, por ejemplo, si tengo una matriz de objetos y necesito manipular una cadena en una de las propiedades del objeto, sería mejor suscribirme manualmente, manejar la respuesta y luego mostrarla en mi plantilla.
¿Es correcta esta suposición?
He usado ambos tipos de observables dentro de los componentes y estas son mis razones (probablemente haya otras que desconozco):
Razones para usar un observable suscrito:
Razones para usar una tubería observable asíncrona:
En ambos casos, puede cargar y manipular datos suscritos dentro de su componente antes de su uso.
A continuación se muestra un ejemplo de cada uno:
Basado en suscripción
TS
someData: SomeClass[] = [ { id: 1, desc: 'One', data: 100 }, { id: 2, desc: 'Two', data: 200 }, { id: 3, desc: 'Three', data: 300 } ]; someData$: Observable<SomeClass[]>; this.someData$ = of(this.someData).subscribe((res) => { this.someData = res.map((r) => { r.data = Math.floor(r.data * 1.1); return r; }); });
Tubería observable asíncrona
TS
... someData: SomeClass[] = []; someData$: Subscription; this.someData$ = of(this.someData).pipe( map((res) => { res.map((r) => { r.data = Math.floor(r.data * 1.1); }); return res; }) );
HTML (para ambas opciones)
<li *ngFor="let data of someData$ | async"> Item={{ data.desc }}. Value={{ data.data }} </li>
Para resumir, el uso de cualquiera de las opciones depende de la complejidad de su componente, su tipo (visual o no visual) y cómo le gustaría administrar la administración de memoria de las suscripciones.
La respuesta a la pregunta original es no, no es necesariamente mejor suscribirse manualmente cuando se trata de cálculos/procesamiento previo. También puede usar una canalización asíncrona para hacer lo mismo que mostré con los dos ejemplos equivalentes anteriores.