Извлечение данных из справочных таблиц!
Если они уже получены, получить данные из localStorage или извлечь по службе и сохранить в localStorage.
Если предыдущий запрос уже обрабатывается, другой запрос должен ждать полные, так что они могут получить данные из localStorage
псевдокод:
isInProgress = false;
getLookup(lookupName: string) {
if(this.isInProgress)
// Code to wait, no delay or timer, please
if(localStorage(lookupName)){
return of(localStorage.get(lookupName));
} else {
this.isInProgress = true;
let url = `..../getLooup?name= {lookupName}`;
this.httpClient.get(url).subscribe(data => {
// Some other code to process the logic
let processedData = someProcess(data);
localStorage.set(lookupName, processedData);
this.isInProgress = false;
return of(processedData)
}, error => {
this.isInProgress = false;
// Log error and other code
})
}
}
Я не очень хорош в RX JS, может быть простое решение!
Если это будет называться так:
xvyService.getLookup('A').subscribe(.....);
xvyService.getLookup('A').subscribe(.....);
xvyService.getLookup('A').subscribe(.....);
xvyService.getLookup('A').subscribe(.....);
База данных не должна ударить более одного раза.