![](/img/trans.png)
[英]rxjs - Angular: How to wait for an Observable function, to call another function that returns an Observable?
[英]Angular 2 and RxJS: How to change HTTP call that returns Observable
如何更改此功能以与下面描述的JSON更改一起使用?
当前函数返回一个Observable<User[]>
,但是使用新的JSON,添加了新的admin
对象。 新功能应成功观察现有的users
数组和新的admins
数组。
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users)
.map((r: Response) => r.json().assets.users as User[]);
}
从/api/users
返回的JSON
{
"assets": {
"users": [
// user objects
]
}
...现在返回两个数组, users
和admins
。
{
"assets": {
"users": [
// array of user objects
],
"admins": [
// array of admin objects
]
}
请假设我的代码确实已经创建了User
和Admin
类,它们可以正确反映返回的相关JSON对象的属性。
好了,您有几种选择如何返回数据:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
const assets = r.json().assets;
return {
users: assets.users as User[],
admins: assets.admins as Admin[]
}
});
}
或像这样:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
assets.users as User[],
assets.admins as Admin[]
]
});
}
或像这样:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
...assets.users as User[],
...assets.admins as Admin[]
]
});
}
如果要在同一数组中返回用户和管理员,则应使用以下代码:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users)
.map((r: Response) => {
var results = r.json();
return results.assets.users.concat(results.assets.admins);
}
}
带有以下数据:
{
"assets": {
"users": [
{ "name": "bob" }, { "name": "john" }
],
"admins": [
{ "name": "jill" }, { "name": "donald" }
]
}
结果将等于:
[ { "name": "bob" }, { "name": "john" }, { "name": "jill" }, { "name": "donald" } ]
正如我对@Maximus答案的评论中所述, .map()
用于将数组转换为新数组,这就是为什么要向.map()
提供函数以告知其要查找的数组的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.