繁体   English   中英

Angular 2和RxJS:如何更改返回Observable的HTTP调用

[英]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
    ]
}

...现在返回两个数组, usersadmins

{
"assets": {
    "users": [
        // array of user objects
    ],
    "admins": [
        // array of admin objects
    ]

}

请假设我的代码确实已经创建了UserAdmin类,它们可以正确反映返回的相关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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM