Угловое 4 кеширование - PullRequest
       4

Угловое 4 кеширование

0 голосов
/ 28 октября 2018

Проблема:

  1. Я должен отобразить большое количество данных

  2. Использовать нумерацию страниц, которая может изменить счет (пользователь может выбрать отображение 10/20/50 на страницу)

  3. Пытался использовать rxjs по следующей ссылке https://blog.thoughtram.io/angular/2018/03/05/advanced-caching-with-rxjs.html

  4. Но у меня есть 2 проблемы, используя это ....

    4,1. Это дает последние данные, но мне нужно отобразить данные для этой конкретной страницы, а также отобразить их, когда я вернусь снова

    4,2. Я использую поиск сверху, который требует, чтобы я использовал все данные, но так как это кэширование получает данные поэтапно, у меня возникнет проблема, когда пользователь выполняет поиск до того, как полные данные извлекаются из серверной службы ...

Пожалуйста, предложите лучший способ решить эту проблему ...

1 Ответ

0 голосов
/ 29 октября 2018

RXJS субъекты имеют 3 различных типа каналов, поскольку

 1) if you miss it you miss it = Subject   
 2) give me the last value =  BehaviorSubject   
 3) give me all the last values = ReplaySubject

звучит так, как будто вы ищете № 3 правильно?Если это так, просто загляните в ReplaySubjects.

Subject - подписчик получит только опубликованные значения, которые были отправлены после подписки.A

BehaviorSubject - последнее значение кэшируется.Подписчик получит последнее значение при первоначальной подписке.

ReplaySubject - он может кэшировать до указанного количества выбросов.Любые подписчики получат все кэшированные значения при подписке.

import * as Rx from "rxjs";

const subject = new Rx.ReplaySubject(2, 100);

// subscriber 1
subject.subscribe((data) => {
    console.log('Subscriber A:', data);
});

setInterval(() => subject.next(Math.random()), 200);

// subscriber 2
setTimeout(() => {
  subject.subscribe((data) => {
    console.log('Subscriber B:', data);
  });
}, 1000)

Мы создаем ReplaySubject и указываем, что мы хотим хранить только последние 2 значения, но не более 100 мс. Мы начинаем излучатьПредметные значения каждые 200 мс.Подписчик А подберет это и зарегистрирует каждое значение, которое излучает Субъект.Мы начинаем подписку с подписчиком B, но делаем это через 1000 мс.Это означает, что субъект уже выпустил 5 значений, прежде чем мы начнем подписку.Когда мы создали тему, мы указали, что хотим сохранить максимум 2 значения, но не более 100 мс.Это означает, что через 1000 мс, когда подписчик B начнет подписку, он будет получать только 1 значение, поскольку субъект выдает значения каждые 200 мс.

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