RxJS. Простой кэш HTTP запроса с параметром

Предлагается использовать Map для параметров запроса. Если используется объект параметров, то лучше его сериализовать в строку, из-за того, что объекты сравниваются по ссылке. Пример

{ a: '1'} == { a: '1' } // вернёт false
JSON.stringify({ a: '1'}) === JSON.stringify({ a: '1' } ) // вернёт true

Кэш через 2 pipe оператора

  • publishReplay(1) - буфер в одно сообщение. Каждый новый подписчик получит последний результат.
  • refCount() - автоматически вызывет методы connect(), если появляются подписчки и unsubscribe(), когда подписчиков не остаётся.
/** http cache map */
private _instanceCache = new Map<string, Observable<TProductInstanceListResponse>>();

...

/**
 * Product instance list
 */
getInstanceList(params: EntityListParams = {}): Observable<TProductInstanceListResponse> {
const key = JSON.stringify(params);
if (!this._instanceCache.has(key)) {
  const response = this._http.get('instance', params).pipe(
    publishReplay(1),
    refCount()
  );
  this._instanceCache.set(key, response);
}
return this._instanceCache.get(key);
}

Похожие записи

let-* $implicit in Angular template

Синтаксис let-* позволяет объявить переменную в шаблоне <ng-template>, использования ключа $implicit позволяет устанавливать значение по-умолчанию для объявленной переменной.

29 августа 2018 г. в Angular

@Directive v/s @Component in Angular

Компоненты создают DOM элементы и добавляют к ним поведение, а директивы только добавляют поведение к существующим DOM элементам

13 августа 2018 г. в Angular

Поисковый запрос с помощью RxJS

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

Angular attribute setter

Пример задания значения булева Input свойства как директивы, на примере:

09 октября 2018 г. в Angular

Angular. Когда не надо отписываться в RxJS?

В async pipe за вас отпишется Angular. Во всех остальных случаях лучше отписываться самостоятельно. Допускается не отписываться в потоках, где будет гарантировано вызван complete.