Angular-将来自 NgRx 选择器的值映射到要作为 Observable 返回的对象

Angular-Mapping value from NgRx selector into an object to be returned as an Observable

我想 return 一个可观察对象(第 6 行)作为 DataObject。第 9 行正在监听商店更改,所以当商店发生更改时 - 第 10、11、12 行执行但不是在商店更改之前执行,对吗?或者它会获取存储中的现有值并执行该块(第 10、11、12 行)。 但是,如果存储还没有改变,第 14 行会等到第 10、11、12 行执行,还是 return 第 14 行作为空对象? 如果我想监听更改我该怎么办 -> 将数据从存储映射到 DataObject 并return它作为可观察的,而不是在那之前?

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);
}

您可以 return 一个新的可观察对象,如下所示:-

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();
              }));
           });     
         }

您无需订阅 selector 即可实现,只需使用 map 运算符并重新调整 Observable 本身,如下所示:

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;
    })
  );
}