ИСПОЛЬЗОВАНИЕ CASE
UserActionsComponents each">
У меня есть страница с несколькими экземплярами UserActionsComponent.У меня также есть глобальный DataService, который выступает в качестве поставщика данных с расширенным кэшированием (wannabe).
Иерархия выборки данных:
Кэш в памяти >> Хранение в браузере (асинхронное)>> HTTP-запрос
UserActionsComponent
Запросы dataService.getData(URL,params,method)
PS: params
содержит такие детали, как blogId, что делает уникальной хэш-подпись
DataService (.getData ())
1) Создает уникальный хеш-ключ, используя что-то вроде genUniqueHash (URL + stringify (params) + метод)
2) Проверяет, присутствует ли значение в кеше в памяти (массив [KEY]) - Если да, возвращает ob $
3) Проверяет, присутствует ли значение в хранилище браузера (асинхронно; использует хранилище Ionic) - Если да, вернуть ob $ else - сохранить в кэш в памяти, затем вернуть ob $ (массив [KEY])
4) Получить значение из HTTP Call, сохранить в хранилище, сохранить вкеш памяти и возврат ob $ (array [KEY])
Эта концепция не работает, так как я не могу понять, как вернуть общийнаблюдаемый (я предполагаю, что это должен быть BehaviourSubject?) из массива значений кэша.Пожалуйста, приведите меня на правильный путь.
ПРИМЕЧАНИЯ
- Если пользователь голосует в одном компоненте, он должен отражать все остальные экземпляры в поле зрения (все UserActionsComponent этой конкретной записи блога должны обновляться)
- Может быть много UserActionsComponent в одном представлении (например, для BlogEntry # 1 и BlogEntry # 25) на одной странице!
- Кэш в памяти продолжает расти, когда пользователь посещает новыеСообщения блога (это нормально, так как это ограниченный набор)
Я новичок в RxJS.Я попытал счастья с:
- pipe (share ()) [Так как это служба, канал был разделен со всеми URL-адресами]
- возвращение (cache [key]) [Не сработало, так как действия пользователя последнего извлеченного BlogEntry отразились бы на всех подписках]
- , возвращая весь кеш и затем отфильтровывая необходимые данные (используя массив [KEY]) в конце UserActionsComponent (Этотекущая реализация)
Текущая реализация работает, но это не лучший способ сделать это для этого варианта использования.Причина: в одном представлении может быть до 20 UAC [UAC-A (1), UAC-B (1), UAC (200) ...].UAC отправляет next () дважды.onInit UAC и когда пользователь голосует "за" или "против" в UAC.Теперь, поскольку при изменении мы генерируем данные кэша, массив размером 20 генерируется 2 * 20 раз для этого просмотра страницы.
Каков был бы наиболее оптимизированный способ реализовать это с помощью RxJS?