RxJS для кэширования Http результата - PullRequest
0 голосов
/ 23 октября 2018

Я нахожусь в процессе миграции приложения Angular v1.4 на v5 (возможно, v6 в новом году).

Приложение имеет ряд компонентов, например, заголовок, вкладки, сетки, изображения,проверка подлинности и т. д.

Каждый компонент задает http.get для получения системных и пользовательских настроек и кэширует результат, чтобы приложение не создавало несколько одинаковых http.get.

Похоже на RxJSэто мощная библиотека и она доступна для использования.Кажется, есть много примеров, методов и представлений о достижении этого кэширования с помощью RxJS.

Хотел поделиться тем, что я сделал, в своем приложении v5 и получить обратную связь.Изучая приложение в DevTools, кажется, что выполняется только 1 http.get, поэтому похоже, что оно работает ..

systemPreferences.service.ts:

const CACHE_SIZE = 1;

export class SystemPreferences {
    private $cache: Observable<Object>

    private requestConfig() {
         return this.http.get("www.someurl.com").pipe(
             map(response => response.value)
         );
    }

    public getPreferences() {
        if (!this.cache$) {
            this.cache$ = this.requestConfig().pipe(
             shareReplay(CACHE_SIZE)
            );
        }

        return this.cache$;
    }
}

header.component.ts:

ngOnInit() {
    this.systemPreferences.getPreferences()
        .subscribe(
            (result: any) => {
                this.headerTitle = result.title || '';
            },
            (err) => {
                console.log('there has been an error');
            },
            () => // Some completion code
        );
}

Тот же код компонента для routingGuard canActivate, вкладок и т. Д. И т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...