Witam, bawię się w cachowanie danych słownikowych i natrafiłem na pewien problem, wyjaśnię od razu, że często komponenty pobierają słownik kilkukrotnie (np. poprzez pipe na htmlu).
Mój problem pojawia się za pierwszym pobraniem słowników, bo dopiero za 6 wywołaniem słownika zapisuje się on do cache (na networku request puszczony 6 razy). Zastanawiam się czy to nie jest problem asynchroniczności, bo po tym pierwszym załadowaniu strony cache działa prawidłowo.
export class CacheInterceptor implements HttpInterceptor {
constructor(private cache: RequestCache) {}
intercept(req: HttpRequest<any>, next: HttpHandler) {
const cachedResponse = this.cache.get(req);
return cachedResponse ? of(cachedResponse) : this.sendRequest(req, next, this.cache);
}
funkcja get nie znajduje ładowanego po raz pierwszy cache więc idzie do funkcji sendRequest:
sendRequest(
req: HttpRequest<any>,
next: HttpHandler,
cache: RequestCache): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
tap(event => {
if (event instanceof HttpResponse && this.isCachable(req.url)) {
cache.put(req, event);
}
})
);
}
Jak sprawić, żeby już za pierwszym razem słownik został zapisany do cache aby nawet w pierwszym przeładowaniu nie pobierać kilkukrotnie tego samego?