在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循环后重新加载页面 实际行为:它会在循环之前重新加载浏览器。
答案 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();
}