Quiero devolver un observable (línea 6) como DataObject. La línea 9 está escuchando los cambios de la tienda, por lo que cuando hay un cambio de tienda, las líneas 10,11,12 se ejecutan pero no antes del cambio de tienda, ¿verdad? O obtendrá el valor existente en la tienda y ejecutará el bloque (líneas 10,11,12). Pero si la tienda aún no ha cambiado, ¿la línea 14 esperará hasta que se ejecute la línea 10,11,12 o devolverá la línea 14 como un objeto vacío? ¿Qué puedo hacer si quiero escuchar los cambios -> mapear los datos de la tienda en DataObject y devolverlos como observables, no antes de eso?
class DataObject { propA: string = ''; propB: string = ''; propC: SecondDataObject; } getDataModel(): Observable<DataObject> { let data = new DataObject(); this.store.pipe(select(appState)).subscribe((val) => { const data = new DataObject(); data.propA = val.propA; data.propB = val.propB; data.propC = val.propC; }); return of(data); }Puede lograrlo sin suscribirse al selector , simplemente usando el operador del mapa y volviendo a sintonizar el Observable , como se muestra a continuación:
getDataModel(): Observable<DataObject> { return this.store.pipe(select(appState)).pipe( map((val) => { const data = new DataObject(); data.propA = val.propA; data.propB = val.propB; data.propC = val.propC; return data; }) ); }Puede devolver un nuevo observable como a continuación: -
getDataModel():Observable<DataObject>() { let data = new DataObject(); return new Observable((observer) => { this.store.pipe(select(appState)).subscribe((val)=>{ data.propA = val.propA; data.propB = val.propB; data.propC = val.propC; observer.next(data); observer.complete(); })); }); }