Пользователь может загружать компании на 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
и вернуть новый в противном случае?