RXJS - 等到两个可观察量都完成

RXJS - waiting until both observables are complete

我是 RXJS 的新手,我正在编写一个验证函数,其中可能会弹出 2 个模式(一个接一个),并且用户必须确认他们可以违反验证规则。

我是这样称呼它的:

this.isValidAssignment(x,y,z).subscribe(result => {
    if (!result) { return; }
    ...do something...
});
isValidAssignment(x, y, z): Observable<boolean> {
      if (x === y){
          of(false)
      }
      if (x < y) {
          return this.confirmIncorrectAssignment();
      }
      if (y !== z) {
          return this.confirmIncorrectAssignment();
      }

      return of(true)
  }

// returns true if they click yes and false if they click no
confirmIncorrectAssignment(): Observable<boolean> {
    const dialogRef = this.dialog.open(ConfirmCancelModalComponent);

    return dialogRef.afterClosed();
  }

我的问题是如果第一次确认执行它会继续并且 returns 一个 Observable 并且它永远不会检查第二次验证。

RXJS 中确保用户确认两种模式的最佳方式是什么?我只希望它在两个 observables 都完成并且它们都单击“是”时发出 true 。

我设法找到了使用 RXJS forkJoin 和 map 运算符的解决方案。我更新后的代码如下所示。

isValidAssignment(x, y, z): Observable<boolean> {
    let o1: Observable<boolean> = of(true);
    let o2: Observable<boolean> = of(true);
      if (x === y){
          return of(false)
      }
      if (x < y) {
          o1 = this.confirmIncorrectAssignment();
      }
      if (y !== z) {
          o2 = this.confirmIncorrectAssignment();
      }

      return forkJoin([o1, o2]).pipe(map((x) => x[0] && x[1]));
  }

因为我将 observable 初始化为 true,所以如果不以其他方式分配给模态的 return,它将发出 true。假设两个验证都被触发,一旦它们都完成,forkJoin 会将其通过管道传输到地图中,然后地图将使用布尔逻辑来 return true 或 false。