Me gustaría suscribir dos observables uno tras otro. El orden es importante y debe mantenerse. El primer observable devuelve un itemId de resultado que debe pasarse a la segunda suscripción. Actualmente, uso suscripciones anidadas, lo cual no es muy agradable. ¿Cuál es la forma más limpia de implementar esto?
// 1 this.widget$ .subscribe((widget) => { const itemId: number = widget.data[0].itemId; // 2 this.store .select(DeviceHistoryStore.getItemHistoryEntries(this.deviceId, itemId)) .subscribe((deviceHistory) => { const name = widget.name; // Run code }); });Simplemente use un SwitchMap .
this.widget$.pipe( switchMap(widget => this.store .select(DeviceHistoryStore.getItemHistoryEntries( this.deviceId, widget.data[0].itemId )) ) ).subscribe(deviceHistory => { /* ... */ )Editar:
Si desea acceder al widget en la devolución de llamada de suscripción:
this.widget$.pipe( switchMap(widget => combineLatest([ of(widget), this.store .select(DeviceHistoryStore.getItemHistoryEntries( this.deviceId, widget.data[0].itemId )) ]) ) ).subscribe(([widget, deviceHistory]) => { /* ... */ )