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

Проблема:

  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 ответ

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.

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

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

Другие вопросы по тегам