`ngrx` - как реализовать кэширование с` эффектами` - PullRequest
0 голосов
/ 08 мая 2019

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

любой исправит меня, чтобы решить проблему.

вот мой код:

constructor(private courseService:CourseService, private actions:Actions,
    private store:Store<StateSetupConfig>){}

@Effect()
    EffLoadCourse = this.actions.pipe(
        ofType(LoadCourse.TYPE),
        withLatestFrom(this.store.pipe(select(subscribes.getCourses)),
            (action, courses) => {
                console.log('courses ::', courses)//getting logged,
                return courses
            }

        ),
       //but each time backend call initiated!!?
        mergeMap((action:LoadCourse) => this.courseService.getCourse().pipe(
            map((courses:ModelCourse[]) => (new LoadCourseSuccess(courses))),
            catchError(err => of(new LoadCourseFail(err)))
        ))

    )

проблема в том, даже если я вернулсяна текущую страницу, я получаю бэкэнд-звонок вместо поставки из магазина.где не так?какое условие нужно добавить сюда?

Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2019

Я придумаю следующее решение: оно работает для меня !!

@Effect()
        EffLoadCourse = this.actions.pipe(
            ofType(LoadCourse.TYPE),
            withLatestFrom(
                this.store.pipe(select(subscribes.getCourses)), //getting it from store
                (action:LoadCourse, courses: ModelCourse[]) => courses
            ),
            mergeMap((courses:ModelCourse[]) => {

                if(courses.length){
                    return of(courses).pipe(
                        map((courses:ModelCourse[]) => (new LoadCourseSuccess(courses))),
                        catchError(err => of(new LoadCourseFail(err)))
                    )
                }

                return this.courseService.getCourse().pipe(
                    map((courses:ModelCourse[]) => (new LoadCourseSuccess(courses))),
                    catchError(err => of(new LoadCourseFail(err)))
                )
            })
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...