Если мое понимание верно, вы хотели бы:
- вызывать
getChartData
, только если данные не существуют в хранилище - отправлять действие
GET_CHART_DATA_COMPLETE
во всехcase
Если это правда.Вы могли бы рассмотреть этот подход: (извините, могут иметь опечатки)
getChartData$ = this.actions$.pipe(
ofType(GET_CHART_DATA),
withLatestFrom(this.store.pipe(select(isDataExistingInStore))),
mergeMap(([action, isDataExistingInStore]: [Action, boolean]) => {
if (!isDataExistingInStore) {
return this.chartService.getChartData(action.payload).pipe(
map((chartData: ChartData) =>
({ type: GET_CHART_DATA_SUCCESS, payload: { tagId: (action as any).payload, chartData: chartData } })
),
catchError(() => of({ type: GET_CHART_DATA_FAILED }))
)
} else {
return of({ type: GET_CHART_DATA_COMPLETE })
};
)
)
Здесь я рассматриваю, у вас есть selector
: isDataExistingInStore
, которые возвращают логическое значение.
Бонус : Могу ли я предложить вам ngrx
лучшую практику для создания действий:
new GetChartDataSuccess(payload)
или даже лучше с создателями действий в version 8
:
myActions.getChartDataSuccess({ tagId: .... });