window.reload () после результата подписки с использованием async / await - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно перезагрузить браузер после завершения цикла forEach функциональности моего Observable.

Я использую Angular 7, я выполняю итерацию forEach и хочу перезагрузить браузер в концецикл.

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

Ожидаемое поведение: перезагрузка страницы после цикла forEach. Фактическое поведение: перезагрузка браузера перед повторением цикла.

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Вместо async / await мое предложение здесь было бы решить, используя 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

0 голосов
/ 21 мая 2019

Вы должны попробовать это:

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