首页 > 解决方案 > 过滤 Observable 中的第一项

问题描述

我有以下组件:

export class UserComponent implements OnInit {

  user$: Observable<UserModel>;

  constructor(private userService: UserService) { }

  ngOnInit() {

    this.user$ = this.getUser();

  }

  getUser(): Observable<UserModel> {

    return this.userService.getByUserId(25).pipe(map((payload: Payload<UserResponse>) => {

      return payload.result.map((response: UserResponse) => { 

        return {
          id: response.id,
          name: response.name,
          // Other mapping properties
        };

      });

    }));

  }
}

我的代码getUser()应该返回一个Observable<UserModel[]>.

但我知道在这种情况下有效载荷只有一个用户响应。

所以我想getUser()方法返回Observable<UserModel>

如何调整管道/地图代码以返回一个 UserModel 的 Observable?

有效载荷

有效载荷是:

export class Payload<T> {

  errors: Error[];
  paging: Paging;
  result: T[];

  constructor(result: T[], paging?: Paging, errors?: Error[]) {

    this.errors = errors;
    this.paging = paging;
    this.result = result;

  }

}

标签: angularangular7angular-observable

解决方案


如果我正确理解为您的 API 仅发送一个实体,并且您需要映射该实体以获取 Observable 而且我看到 UserResponse 接口不等于 UserModel。因此,您需要将数组的第一个元素映射为仅获取[0]以及 UserModel 道具:

getUser(): Observable<UserModel> {

    return this.userService.getByUserId(25)
      .pipe(
        map((payload: Payload<UserResponse>) => ({id:payload.result[0], name: payload.result[0].name})
      );

  }

推荐阅读