Angular 6 Material - 等待 Mat Dialog 关闭

kee*_*hee 5 asynchronous async-await angular-material angular angular6

我有一个要完成的操作列表,如果设置了布尔值 promptRequired,我会显示一个对话框并根据它的值执行一些操作。

这里的问题是 for 循环并行运行并且所有操作同时执行,但我希望 for 循环同步运行并且循环必须等到对话框关闭。有解决办法吗?

async runActions() {
 for (const action of Actions) {
      if(action.promptRequired) {
      const dialogRef = this.promptDialog.open(PromptDialogComponent, {
        data: {action: action,
        },
      });
      // await dialogRef.afterClosed();
     }
    }

     const status =  await this.httpService.getRequest('runAction', action)
     // Do Some Action based on status
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

Ted*_*rne 10

你可以把afterClosedObservable 变成一个 promise 并等待结果。例子:

async runActions() {
  for (const action of Actions) {
    if(action.promptRequired) {
      const dialogRef = this.promptDialog.open(PromptDialogComponent, {
        data: {action: action },
      });

      await dialogRef.afterClosed().toPromise();
    }
  }

  const status =  await this.httpService.getRequest('runAction', action)
  // Do Some Action based on status
}
Run Code Online (Sandbox Code Playgroud)