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 не существует, и в этом случае выполняется специальная операция, которая изменяет URL с помощью saveId.И во время последующего сохранения будет присутствовать так, в этом случае нет необходимости изменять URL-адрес.Проблема с вышеупомянутым заключается в том, что во время первого сохранения метод подписки вызывается дважды.