有没有办法在执行下一行代码之前等待商店调度在 ngrx 中完成?

Is there a way to wait for the store dispatch to complete in ngrx prior to executing next line of code?

我想等待 ngrx 中商店的调度完成。然后,我想执行同步调用的下一行语句。

我试过如下,效果如预期。问题是 delay(2500) 并不是所有的准确时间。有时可能需要或多或少的时间来完成商店调度代码行。有没有更好的方法来处理它以便在 this.store.dispatch... 完成后执行 return of(false) 语句?

validateRules(isCompleteActivity : boolean) {
this.isSubmitProgress = true;
this.transmitSubscription = this.menuService.getRules(this.parameters, 
  statusTypeOptions.Error).pipe(
    switchMap(x => {
      if (x.ruleOutput.length > 0) {
        return of(false);
      } else { 
        return this.saveService.saveToGrid(null, null).pipe(
          switchMap(successful=> {
            if (successful) {
              if (this.center == '002' && (this.activity == 'AAA' || this.activity == 'BBB')) {
                this.store.dispatch(new fromActions.LoadDetails(this.parameters, 
                isCompleteActivity));
                delay(2500);
                return of(false);
              }
              else {
              return this.flowService.completeAction();
              }
            }
              return of(false);
          })
        );
      }
    })
  ).subscribe(isSuccess => {
    this.isSubmitProgress = false;
    if (isSuccess) {
      this.bridgeService.closeWindow();
    }
  },
    error => {
    this.isSubmitProgress = false;
    }
  )
}

我在上面的问题中卡了几天,不知道如何才能摆脱它。非常感谢您的帮助。再次感谢!

你看过效果了吗?

使用 effects 你可以得到分派的动作,并在它们被减速器应用后做一些事情。我会建议重新编写代码以仅调度操作,并根据原始调度的结果实现一个效果来处理下一步的操作。