Пользователь может загружать компании id
через файл CompanyService
. Поскольку компания не изменится на протяжении всего срока службы приложения, я подумал, что имеет смысл кэшировать все уже загруженные элементы и загружать новые только при необходимости.
Теперь я придумал это решение, которое работает с использованием локального Array<Company>
в качестве кеша. Он возвращает of()
найденного элемента, а альтернативно загружает новый и сохраняет его в кеше.
export class CompanyService {
private cache: Array<Company> = [];
private path: string = '';
getById(id: number): Observable<Company> {
const company = this.cache.find(item => item.id === id);
if (company) {
return of(company);
}
return this.http.get<any>(this.path + id).pipe(
map(response => {
this.cache.push(response);
return response;
}),
catchError(error => {
return of(null);
})
);
}
}
Это правильный способ сделать это?
Я подумал, что было бы лучше использовать что-то вроде:
private cache$: Observable<Array<Company>>;
Но я не знаю:
- … это лучший подход?
- … как добавить новый элемент?
- … как найти элемент в этом
Observable
и вернуть новый иначе?