forkJoin 取决于 Angular 中的另一个响应

forkJoin depending on another response in Angular

我有一个 switchMap,然后是一个 forkJoin,但是其中一个调用依赖于另一个调用

this.route.paramMap
        .pipe(
          switchMap((params) => {
            let id = parseInt(params.get('id'));
            return forkJoin({
              tableDataDetail: this.tblService.getTableDataDetail(id),
              comboDetails: this.tblService.getUserComboDetails(// the id from the response of tableDataDetail),
            });
          })
        )
        .subscribe(
          ({ tableDataDetail, comboDetails }) => {
            this.data = tableDataDetail;
            this.comboDetails = comboDetails;   
          }
        )

如您所见,我需要作为 getUserComboDetails() 服务的参数,一个来自另一个服务(即 tableDetailId)的响应的字段。我怎样才能用这种方式做到这一点?

如果一个 obs 需要另一个 obs 的值,您需要再次使用 switchMap

this.route.paramMap
  .pipe(
    switchMap(params => {
      let id = parseInt(params.get("id"));
      return this.tblService.getTableDataDetail(id).pipe(
        switchMap(tableDataDetail => {
          return this.tblService
            .getUserComboDetails(tableDataDetail.id)
            .pipe(
              map(details => ({
                tableDataDetail: tableDataDetail,
                comboDetails: details
              }))
            );
        })
      );
    })
  )

注意:您可以在地图中,而不是return一个对象return一个数组

this.route.paramMap.pipe(
      ...
                map(details=>([tableDataDetail,details]
                )
              )
           }
        )
      }))

所以,您可以在订阅时使用 destructuring

   ....subscribe(res=>{
        [this.data,this.comboDetails]=res;
       })

Update 我做了 a stackblitz 并更正了语法错误 - 缺少一些 {)