Я просто работал над решением этой конкретной проблемы, поэтому я решил поставить свои 2 цента здесь на тот случай, если кто-то еще может найти это полезным.
Есть отличная статья Стоит использоватьЭффекты NGRX для этого .Это говорит о том, насколько сложно попытаться втиснуть это в цепочку эффектов ngrx.
Вместо этого они рекомендуют использовать сервис, который я использую и люблю.Простая версия может выглядеть следующим образом.
Service:
public posts$ = this.store.select(postSelectors.selectAll)
.pipe(
tap(posts => {
if (!posts.length) {
this.store.dispatch(new postActions.LoadMany());
}
}),
filter(posts => posts !== null)
);
Здесь мы в основном просто пытаемся выбрать желаемую часть состояния, а если ее нет, отправляем действие, которое вызывает эффект, чтобы получить его изapi и отправьте его в магазин.
Component:
this.posts$ = this.postService.posts$;
Тогда в своем компоненте вы можете просто подписаться на наблюдаемое из вашего сервиса и не заботиться о том, находится он в магазине или нет.Затем вы можете либо подписаться на это в своем компоненте, чтобы получить значение, либо отправить его в шаблон с помощью асинхронного канала.
Это очень хорошо работает для простых вещей, но я все еще работаю над более сложными цепочками RXJS длякогда вы должны получить данные, которые зависят от других данных, чтобы существовать в первую очередь.Но это всего лишь ограничение моих способностей при написании функций RXJS.