onSave() {
// event handler
const save$ = combineLatest(this.configData.data, this.layerService.layerData)
.pipe(
filter(([configData]) => !_.isEmpty(configData)),
take(1),
tap(_ => this.loadingService.showLoading()),
map(data => this.createSaveConfig(data)),
flatMap(dataJSON => this.saveService.save(dataJSON)),
).share();
const saveAndReload$ = save$.pipe(
filter(_ => !this.savedId),
pluck('savedId'),
flatMap(savedId => this.saveService.getData(savedId)),
tap(reportData => this.retrievedReport = reportData),
pluck('savedId'),
tap(savedId => {
this.savedId = savedId;
this.location.replaceState(`/notes/${this.savedId}`);
})
);
save$.merge(saveAndReload$).subscribe(_ => {
this.loadingService.hideLoading();
}, err => this.errorService.error(err));
}
在初始保存saveId时不存在,在这种情况下,将执行特定操作,该操作使用saveId更改了url。 并且在随后的saveId出现期间,因此在这种情况下无需更改url。 上面的问题是,在第一次保存订阅方法期间,调用了两次。