我有以下内容:
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[]>
。
但是我知道在这种情况下,有效负载只有一个UserResponse。
所以我希望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;
}
}
答案 0 :(得分:1)
如果我正确理解为您的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})
);
}
答案 1 :(得分:1)
如果您只是想将嵌套在results
属性中的服务器响应映射到新对象,则要映射到results
属性,然后再次映射以返回新的宾语。像这样:
getUser(userId): Observable<UserDetailModel> {
return this.userService.getByUserId(userId).pipe(
map(payload => payload.result[0])
map(result => {
return {
id: result.id,
name: result.name,
// Other mapping properties
};
}));
}