angular - 过滤 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;
}
}
解决方案
如果我正确理解为您的 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})
);
}
推荐阅读
- php - Saving array to file txt
- code-generation - 使用 Raku 计算 e 数
- python - 读取彩色数字图像要控制台的数字
- c# - How to get request payload using Titanium Web Proxy in C#?
- theorem-proving - 如何使用 LEAN 证明命题逻辑中的两个陈述?
- javascript - When is an elementHandle not an elementHandle
- java - TestNG/Maven Encoding issue
- python - 如何在大量非空格字符后添加换行符?
- postgresql - 如何检查两列中至少一列是否填充了数据?
- c++ - 在 Clion CMake 中包含 Eigen 库的问题