Angular 2路由器参数发出多个http调用

Angular 2路由器参数发出多个http调用,angular,angular2-routing,angular2-http,Angular,Angular2 Routing,Angular2 Http,我在Angular中有一个路由,在这里我传递一个id以从数据库加载一个元素。在我的组件中,我使用以下代码加载元素: this.route.params .map((params: Params) => params['id']) .switchMap((id: number) => this.service.getElement(id)) .catch((e) => { return Observable.

我在Angular中有一个路由,在这里我传递一个id以从数据库加载一个元素。在我的组件中,我使用以下代码加载元素:

this.route.params
        .map((params: Params) => params['id'])
        .switchMap((id: number) => this.service.getElement(id))
        .catch((e) => {
            return Observable.throw(e);
        })
        .subscribe((data: Models.IElement) => {
            this.element= data as Models.IElement;
            this.setTitle();
        }, () => this.router.navigate(['/']));
this.route.params
        .map((params: Params) => params['id'])
        .switchMap((id: number) => {
            this.id = id;
            return Observable.forkJoin([this.service.getElem(id), this.service.getElemDocs(id)]);
        })
        .catch((e) => {
            return Observable.throw(e);
        })
        .subscribe(([elem, documents]) => {
            this.elem= elemas Models.IElement;
            this.elemDocuments = documents;
            this.setTitle();
        }, () => this.router.navigate(['/']));
其中this.service.getElementid进行http调用并返回一个可观察的。一切进展顺利。我现在的问题是,我想发出第二个http调用,但我不知道在哪里为第二个服务http调用添加代码。这将是一个与getElement类似的方法,接收一个id作为参数

更多信息:第二个http调用最好与getElement调用并行发出。它仅取决于参数的id


我如何使用可观测数据来实现这一点?有什么方法可以让它工作吗?

使用@Maxime的评论,我附带了以下代码:

this.route.params
        .map((params: Params) => params['id'])
        .switchMap((id: number) => this.service.getElement(id))
        .catch((e) => {
            return Observable.throw(e);
        })
        .subscribe((data: Models.IElement) => {
            this.element= data as Models.IElement;
            this.setTitle();
        }, () => this.router.navigate(['/']));
this.route.params
        .map((params: Params) => params['id'])
        .switchMap((id: number) => {
            this.id = id;
            return Observable.forkJoin([this.service.getElem(id), this.service.getElemDocs(id)]);
        })
        .catch((e) => {
            return Observable.throw(e);
        })
        .subscribe(([elem, documents]) => {
            this.elem= elemas Models.IElement;
            this.elemDocuments = documents;
            this.setTitle();
        }, () => this.router.navigate(['/']));

这将同时启动两个呼叫并等待两个呼叫的完成。

您想在哪里进行第二个呼叫?它基于什么?关于以前的答复?路线参数id?请提供更多信息这只是基于id。理想情况下,它将与getElement调用并行发布。我现在没有时间给您提供解决方案,但请仔细看看,这相当于承诺。它将订阅您传递的每个观测值,然后等待它们中的每一个都完成,然后再继续。当然,它们是并行发射的。我让你尝试一下,如果不成功,我会帮助你: