Tengo este setter que asigna un miembro de la clase systemAreasOptions$ observable. Lo hago allí porque necesita esperar a que mappedItem$ haya tenido una emisión que no sea nula. Originalmente tenía systemAreasOptions$ asignado en el nivel de clase, pero no esperó a mappedItem$ . Por alguna razón, ni siquiera pude hacer que el HTML se volviera a representar cuando usaba asyncPipe . ¿Cómo le digo a un observable ( systemAreasOptions$ que espere otro observable ( mappedItem$ ), en lugar de simplemente asignarlo donde emite el otro?
public set mappedItem(mappedItem: IPermissionsMappedItem) { mappedItem.hydrate$Permissions().then(_ => { this.mappedItem$.next(mappedItem); this.systemAreasOptions$ = from( this.lookupService.SYSTEM_AREAS.toNestedLookup() .$promise as unknown as Observable<IPermissmissionsLookup[]> ).pipe( map(systemAreas => orderBy(systemAreas,systemArea => systemArea?.label?.toLowerCase())), map(systemAreas => systemAreas.map(area => ({ ...area, permissions: this.getPermissionsForArea(area.id) }))), shareReplay(1), tap(console.log) ); this._subscriptions.add( this.systemAreasOptions$.subscribe( this.systemAreasOptionsBehaviourSubject$) ); }); }Puedes combinar los observables:
Creo que estás buscando withLatestFrom:
higherOrder$ = mappedItemThatIsNotNull$.pipe( withLatestFrom(systemAreasOptions$) )En tu plantilla:
higherOrder$ | asyncEsto generará [mappedItem, systemAreaOptions]