Angular 6 Material - 等待 Mat Dialog 关闭

标签 angular asynchronous async-await angular-material angular6

我有一个要完成的操作列表,如果设置了 bool 值 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
  }
 }
}

最佳答案

您只需转动 afterClosed可观察到 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
}

关于Angular 6 Material - 等待 Mat Dialog 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53283838/

相关文章:

javascript - 如何从异步调用返回响应?

php - 在 php 中运行异步函数

c# - 关于 Async 和 Await 的工作原理 c#

c# - 对 WCF 服务的异步调用不保留 CurrentCulture

angular - Typescript 中的解构赋值

angular - 如何使指令和组件在全局范围内可用

Java并发任务实现

c# - 异步任务与异步无效

javascript - 如何正确显示 Klarna Pay Over Time 小部件?

html - 如何在 Angular (点击)方法中包含数据层函数