【问题标题】:X inner calls and forkJoin deprecationX 内部调用和 forkJoin 弃用
【发布时间】:2020-11-20 15:42:43
【问题描述】:

我有以下代码:

ngOnInit(): void {
  this.issueService.getIssues().pipe(
    switchMap(issues => {
      this.issuesList = issues;
      const observables = this.issuesList.map(issue => this.issueService.getChildrenIssues(issue.id));

       return forkJoin([observables]);
     })
  ).subscribe(
  (...results) => {
    results.map((result, i) => {
      this.childIssueMap.set(this.issuesList[i].id, result);
      // error: Argument of type '[Observable<Issue[]>]' is not assignable to parameter of type 'Issue[]'.
    });
  }
);
}

地点:

public issuesList: Issue[];
public childIssueMap = new Map<string, Issue[]>();

我需要先调用“getIssues()”从服务器获取所有问题。然后,当我得到它们时,我需要为它们中的每一个调用一个服务“getChildrenIssues(parentId)”,在那里我传递问题 ID 并得到所有子问题。然后我将子问题存储在 childIssueMap 中,使用父 ID 作为键,子问题列表作为值。

我不太确定该怎么做。我尝试使用 forkJoin,但我的编辑说它已被弃用,因此我使用了带有 [] 的变体,但这次我收到了您在上面看到的错误。

【问题讨论】:

  • 弃用意味着你应该使用 forkJoin([a,b]) 而不是 forkJoin(a,b)
  • 冷你提供一个例子?另外,请检查我的编辑,因为我认为我使用 forkJoin 的方式错误。
  • 您当前传递一个包含单个元素的数组,即一个包含任何 getChildrenIssues 返回元素到您的 forkJoin 的数组。
  • 你也不应该链接订阅。请改用pipe()

标签: angular typescript rxjs fork-join


【解决方案1】:

我通过以下方式使用 forkJoin 解决了这个问题:

this.issueService.getIssues().pipe(
  switchMap(
    issues => {
       this.issuesList = issues;
       const observables = this.issuesList.map(issue => this.issueService.getChildrenIssues(issue.id));
       const source = forkJoin(observables);

       return source;
  })
).subscribe(
  (children) => children.forEach((child, i) => {
    this.childIssueMap.set(this.issuesList[i].id, child);
  })
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2020-09-29
    • 2019-01-20
    • 1970-01-01
    相关资源
    最近更新 更多