如何从 angular observable 获取值?
How to get values from angular observable?
我有这样的 http 响应:
{
version: "",
result: {
pageInfo: {...},
data: []
}
}
所以我使用 angular 服务收到此响应。并在组件中使用此服务。
export class UserComponent implements OnInit {
users$: Observable<User[]>;
pageInfo$: Observable<PageInfo>;
constructor(private userService: UserService) { }
ngOnInit() {
this.users$ = this.userService.getUsers().pipe(
/// how to map response for users$ and pageInfo$ ???
// response.data will be in users$
// response.pageInfo will be in pageInfo$
);
}
}
但我无法映射两个不同的可观察响应。有什么实用的解决方案吗?
这样做。请注意share-Operator,否则请求将发送两次。
export class UserComponent implements OnInit {
users$: Observable<User[]>;
pageInfo$: Observable<PageInfo>;
constructor(private userService: UserService) { }
ngOnInit() {
const result$ = this.userService.getUsers().pipe(
map(response => response.result),
share();
);
this.users$ = result$.pipe(
map(result => result.data),
);
this.pageInfo$ = result$.pipe(
map(result => result.pageInfo),
);
}
}
考虑应用 shareReplay
运算符(与 share
运算符不同,其中 this.userService.getUsers()
返回的 Observable 将在第一个 Observable 完成后被订阅时重新订阅,导致进一步的 HTTP 请求,使用 shareReplay
允许访问以前发出的值)如下所示:
users$: Observable<User[]>;
pageInfo$: Observable<PageInfo>;
constructor(private userService: UserService) { }
ngOnInit() {
const shared$ = this.userService.getUsers()
.pipe(
map(({ result }) => result),
shareReplay(1)
);
this.users$ = shared$.pipe(map(({ data }) => data));
this.pageInfo$ = shared$.pipe(map((pageInfo) => pageInfo));
}
像这样使用 ES6 Destructuring
功能:
Component.ts
this.userService.getUsers().subscribe((res) => {
let { version, result } = res;
});
有关 Destructring
的更多信息,请访问 this link。
我有这样的 http 响应:
{
version: "",
result: {
pageInfo: {...},
data: []
}
}
所以我使用 angular 服务收到此响应。并在组件中使用此服务。
export class UserComponent implements OnInit {
users$: Observable<User[]>;
pageInfo$: Observable<PageInfo>;
constructor(private userService: UserService) { }
ngOnInit() {
this.users$ = this.userService.getUsers().pipe(
/// how to map response for users$ and pageInfo$ ???
// response.data will be in users$
// response.pageInfo will be in pageInfo$
);
}
}
但我无法映射两个不同的可观察响应。有什么实用的解决方案吗?
这样做。请注意share-Operator,否则请求将发送两次。
export class UserComponent implements OnInit {
users$: Observable<User[]>;
pageInfo$: Observable<PageInfo>;
constructor(private userService: UserService) { }
ngOnInit() {
const result$ = this.userService.getUsers().pipe(
map(response => response.result),
share();
);
this.users$ = result$.pipe(
map(result => result.data),
);
this.pageInfo$ = result$.pipe(
map(result => result.pageInfo),
);
}
}
考虑应用 shareReplay
运算符(与 share
运算符不同,其中 this.userService.getUsers()
返回的 Observable 将在第一个 Observable 完成后被订阅时重新订阅,导致进一步的 HTTP 请求,使用 shareReplay
允许访问以前发出的值)如下所示:
users$: Observable<User[]>;
pageInfo$: Observable<PageInfo>;
constructor(private userService: UserService) { }
ngOnInit() {
const shared$ = this.userService.getUsers()
.pipe(
map(({ result }) => result),
shareReplay(1)
);
this.users$ = shared$.pipe(map(({ data }) => data));
this.pageInfo$ = shared$.pipe(map((pageInfo) => pageInfo));
}
像这样使用 ES6 Destructuring
功能:
Component.ts
this.userService.getUsers().subscribe((res) => {
let { version, result } = res;
});
有关 Destructring
的更多信息,请访问 this link。