RxJS:将两个http.get()组合到一个对象

时间:2016-08-12 04:48:57

标签: json wordpress angular rxjs observable

我使用WP Rest API使用Angular 2访问我的Wordpress数据库。我使用他们的post API并返回一个我映射的json对象来创建一个对象。

对象:

export class BlogPost {
    date: Date;
    id: number;
    link: string;
    title: string;
    author: number;
    excerpt: string;
    featuredMediaURL: string;
    featuredMediaID: number;
    categories: string[];
    tags: string[];


    constructor(obj?: any) {
        this.date               = obj && obj.date               || null;
        this.id                 = obj && obj.id                 || null;
        this.link               = obj && obj.link               || null;
        this.title              = obj && obj.title              || null;
        this.author             = obj && obj.author             || null;
        this.excerpt            = obj && obj.excerpt            || null;
        this.featuredMediaURL   = obj && obj.featuredMediaURL   || null;
        this.featuredMediaID    = obj && obj.featuredMediaID    || null;
        this.categories         = obj && obj.categories         || null;
        this.tags               = obj && obj.tags               || null;
    }
}

服务:

export class BlogService {
    constructor(public http: Http,
                @Inject(DOMAIN) private domain: string) {  }

    getPost(): Observable<BlogPost[]> {
        return this.http.get(`${this.domain}/wp-json/wp/v2/posts/?page=1`)
            .map((response: Response) => {
                return (<any>response.json()).map(item => {
                    return new BlogPost({
                        date: item.date,
                        id: item.id,
                        link: item.link,
                        title: item.title,
                        author: item.author,
                        excerpt: item.excerpt,
                        featuredMediaID: item.featured_media,
                        categories: item.categories,
                        tags: item.tags
                    });
                });
            });
    }

我的问题是,对于某些属性(如媒体),API会返回媒体的ID而不是网址。我能够通过创建一个单独的服务来混合和匹配并将url放入模板中,该服务返回存储在数据库中的所有媒体,然后比较两个数组之间的id号并返回正确的:

mediaURL(id: number): string {

    for (let med of this.media) {
        if(med.id === id) {
            return med.url;
        };
    };
    return 'error';
}

但这有点乏味。我想知道是否有一个干净的rxjs方法来发布

this.http.get(`${this._domain}/wp-json/wp/v2/media/<id>`)
在将整个帖子数组返回给博客组件之前,

将其映射到BlogPost.featuredMediaURL。

我已经搞砸了一天尝试了几件事,我不知所措。

0 个答案:

没有答案