1

我在 Angular 中有一些复杂的 observable(感谢使用 Akita,我无法更改它),它是对象|数组、单个对象未定义的 'ed Observable:DinosaurDinosaur

import { QueryEntity } from "@datorama/akita";

export class DinosaurQuery extends QueryEntity<DinosaurState, Dinosaur> {
  activeDinosaurs$ = this.selectActive(); // Type: Observable<Dinosaur[]> | Observable<Dinosaur | undefined>

  constructor(protected store: DinosaursStore) {
    super(store);
  }
}

作为一个可观察的,我想从中得到的是单个对象,或者是数组中的第一个对象,以防它是一个数组。或未定义,如果没有。

export class DinosaurSelection {
    // I want singleSelectedDinosaur$ to be of type: Observable<Dinosaur | undefined>
    singleSelectedDinosaur$ = this.dinosaurQuery.activeDinosaurs$.pipe(???);

    constructor(protected dinosaurQuery: DinosaurQuery) {}

}

我认为一定有一些管道可以做到这一点,但我找不到合适的东西可以同时作用于|对象和该对象的数组。(或者也许它不能用管道完成,但以另一种方式,这也很好。)

4

1 回答 1

3

如果是数组,只需使用“管道(地图)”来转换

singleSelectedDinosaur$ = this.dinosaurQuery.activeDinosaurs$.pipe(
    map((res:any)=>{
       if (res && Array.isArray(res)) //if res and is array
          return res[0]   //return the first element
       return res;      //else resut res
    }
));
于 2020-09-05T18:23:07.380 回答