过滤 Observable 中的第一项
Filter first item in 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()
应该 return a Observable<UserModel[]>
.
但我知道在这种情况下有效负载只有一个 UserResponse。
所以我想 getUser()
方法 return Observable<UserModel>
.
如何将管道/映射代码调整为 return 一个 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 props:
getUser(): Observable<UserModel> {
return this.userService.getByUserId(25)
.pipe(
map((payload: Payload<UserResponse>) => ({id:payload.result[0], name: payload.result[0].name})
);
}
如果您只是想将嵌套在 results
属性 中的服务器响应映射到一个新对象,您需要映射到 results
属性,然后再次映射到 return 新对象。像这样:
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
};
}));
}
我有以下组件:
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()
应该 return a Observable<UserModel[]>
.
但我知道在这种情况下有效负载只有一个 UserResponse。
所以我想 getUser()
方法 return Observable<UserModel>
.
如何将管道/映射代码调整为 return 一个 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 props:
getUser(): Observable<UserModel> {
return this.userService.getByUserId(25)
.pipe(
map((payload: Payload<UserResponse>) => ({id:payload.result[0], name: payload.result[0].name})
);
}
如果您只是想将嵌套在 results
属性 中的服务器响应映射到一个新对象,您需要映射到 results
属性,然后再次映射到 return 新对象。像这样:
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
};
}));
}