Observable.fork在另一个请求中请求rxJs请求

时间:2016-08-09 08:44:40

标签: angular typescript rxjs

我想要一些方法向我的服务器发送两个请求以获取对象列表(DocumentComponent),在这个DocumentComponent中我有一个对象DocumentContents列表

所以我需要在每次获得一个对象DocumentComponent之后我得到它的DocumentContents

this.gridService.getAllDocumentComponentByTemplate(1)
            .subscribe(data => {
                    this.documentComponents = data;
                    console.log(this.documentComponents);
                    for (var component of this.documentComponents) {
                           this.getAllDocumentContents(component.id);
                    }
                },
                error => alert('Erreur ' + error),
                () => {
                    console.log("finished  ");
                }
            );

但这种方法不能并行工作 我得到最新DocumentComponent的最后一个DocumentContent列表

那么如何使用Observable.forkJoin或者有其他方法可以做到这一点谢谢

 Observable.forkJoin(
            this.gridService.getAllDocumentComponentByTemplate(1),
            this.gridService.getAllDocumentContentByDocumentComponent(**id**)
        ).subscribe(data => {
            this.documentComponents = data[0];
            this.documentContents = data[1];
        },
            err => console.error(err)
    );

我尝试了但是我得到了DocumentContents的最新列表,因为我将第二个方法getAllDocumentContentByDocumentComponent中的id作为一个静态值放入我需要使其变量

谢谢你的时间

getAllDocumentContentByDocumentComponent(idDocumentComponent:number) {
        return this._http.get('http://localhost:8080/template/getAllDocumentContentByDocumentComponent/' + idDocumentComponent)
            .map(res => res.json());
    }
    getAllDocumentComponentByTemplate(idDocument:number) {
        return this._http.get('http://localhost:8080/template/getAllDocumentComponentByTemplate/' + idDocument)
            .map(res => res.json());
    }

1 个答案:

答案 0 :(得分:0)

我会尝试这样的事情:

this.gridService.getAllDocumentComponentByTemplate(1)
    .flatMap(documentComponents => {
      let contentObservables =  documentComponents.map(documentComponent => {
        return this.gridService.getAllDocumentContentByDocumentComponent(
          documentComponent.id);
      });

      return Observable.forkJoin([
        Observable.of(documentComponents),
        ...contentObservables
      ]);
    })

首先获取文档组件,构建observable以获取每个组件的内容,然后使用forkJoin并行执行所有内容。

请注意使用Observable.of来获取初始请求的结果。