【发布时间】:2019-06-08 15:28:24
【问题描述】:
我有以下组件:
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;
}
}
【问题讨论】:
-
也许您想使用
switchMap,但我实际上不确定您要的是什么。switchMap会将上下文“切换”到您在map回调中返回的内容,因此它不会像现在这样嵌套。 -
该部分返回 this.userService.getByUserId(25) ... 返回一个 Observable
但由于我知道响应只有一项我需要 getUser() 来返回 Observable。你明白吗? -
或多或少。可能你想要
switchMap -
管道(map(payload=>payload[0]))?
-
只需从数组的第一个元素然后
payload.result[0]创建你想要返回的对象。
标签: angular angular7 angular-observable