在 Angular 的循环中订阅一个 observable

Gre*_*eye 2 rxjs angular

我有一个用例,我需要订阅一个Observable然后循环响应,以便Observable使用第一个Observable.

  getTasks(taskType: Observable<any>): void {
    taskType // Subscribing to the first Observable
      .subscribe(
        (tasks: any) => {
          let row: InboxTasks;
          for (const task of tasks) { // Looping through the result
            if (task.assigned_id) { // I need to extract that data in order to use it as an argument of the second Observable below
              this.auth.getUserById(task.assigned_id).subscribe((user) => this.username = `${user.firstname} ${user.lastname}`);
            }
            row = {
              assigned: this.username ? this.username : '', // Here I use my newly created property
              task: task.displayName
            };
            this.rowData = [
              ...this.rowData,
              row
            ];
          }
        }
      );
  }
Run Code Online (Sandbox Code Playgroud)

使用该方法可以在第二个Observable完成之前执行循环。Observable在那种情况下,我如何设法使用这一秒?

谢谢

mar*_*tin 5

您可以首先根据第一个 Observable 的响应收集所有内部 Observables 并等待所有内部 Observables 完成forkJoin

taskType
  .pipe(
    concatMap(tasks => {
      const observables = [];
      for (const task of tasks) {
        observables.push(this.auth.getUserById(task.assigned_id));
      }
      return forkJoin(...observables).pipe(
        map(innerResults => ({
          innerResults,
          tasks
        }))
      );
    })
  )
  .subscribe(({ innerResults, tasks }) => ...);
Run Code Online (Sandbox Code Playgroud)