【问题标题】:Observable.forkJoin rxJs requests within another requestObservable.forkJoin rxJs 请求在另一个请求中
【发布时间】:2016-08-09 17:00:43
【问题描述】:

我想要某种方式向我的服务器发送两个请求以获取对象列表 (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());
    }

【问题讨论】:

  • id 到底是什么,并从先前的请求中获取它?谢谢!
  • id 是 DocumentComponent 的 DocumentContent 的外部 id 从这个 id 我可以访问当前 DocumentComponent 的所有 DocumentContent
  • 好的。 getAllDocumentComponentByTemplate 返回DocumentComponent 的列表?还是一个人?
  • 是的,它返回一个列表,我将更新我的问题

标签: angular typescript rxjs


【解决方案1】:

我会尝试这样的:

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

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

首先获取文档组件,构建可观察对象以获取每个组件的内容,然后使用 forkJoin 并行执行所有操作。

注意使用Observable.of 才能得到初始请求的结果。

【讨论】:

    猜你喜欢
    • 2019-01-02
    • 1970-01-01
    • 2018-06-13
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多