使用async / await订阅结果后的window.reload()

时间:2019-05-20 16:45:35

标签: angular asynchronous async-await

在Observable上完成功能的forEach循环后,我需要重新加载浏览器。

我正在使用Angular 7,正在进行forEach迭代,并且想在循环结束时重新加载Brownser。

async validateMetric(metrics: Metric[]) {
   metrics.forEach(metric => {
    this.metricsService.editMetric(metric)
     .subscribe(metricUpdated => {
       return metricUpdated;
      })
    });
    await location.reload();
  }

预期的行为:在forEach循环后重新加载页面 实际行为:它会在循环之前重新加载浏览器。

2 个答案:

答案 0 :(得分:1)

代替异步/等待,我的建议是使用rxjs'forkJoin'解决此问题。

validateMetric(metrics: Metric[]) {

  let metricObservables[]: Observable[];

  metrics.forEach(metric => {
     metricObservables.push(this.metricsService.editMetric(metric);
  });

  forkJoin(metricObservables).subscribe(result => { location.reload(); })

}

进一步了解forkJoin https://www.learnrxjs.io/operators/combination/forkjoin.html

答案 1 :(得分:0)

您必须尝试以下操作:

async validateMetric(metrics: Metric[]) {
  metrics.forEach(metric => {
    await this.metricsService.editMetric(metric)
      .subscribe(metricUpdated => {
        return metricUpdated;
      })
  });
  location.reload();
}