Мой вопрос является продолжением это отличный вопрос и ответ о форме данных с разбивкой на страницы в хранилище избыточности. Я использую ngrx/store в приложении angular 2.
{
entities: {
users: {
1: { id: 1, name: 'Dan' },
42: { id: 42, name: 'Mary' }
}
},
visibleUsers: {
ids: [1, 42],
isFetching: false,
offset: 0
}
}
Основываясь на приведенной выше форме, я считаю, что если бы смещение (или страница, сортировка и т. д.) полезной нагрузки входящего запроса изменилось, то видимые пользователи изменились бы, а также пользовательские сущности, вызвав БД. У меня есть некоторые действия и функции редуктора, чтобы справиться с этим, и это работает, как и ожидалось. Если смещение остается прежним и пользователь возвращается на страницу так, как он ее оставил, то пользовательские сущности должны быть возвращены хранилищем, а не БД.
Где я борюсь, так это в том, где разместить эту логику и какие операторы rxjs использовать (все еще изучаю это).
Я думаю, правильное место - это эффект. Вот что у меня сейчас есть в моем приложении angular2 (я добавляю Actions, Store и мой UserService), которое извлекает новые данные каждый раз при загрузке страницы.
@Effect loadUsers$ = this.actions$
.ofType('LOAD_USERS')
.switchMap(() => this.userService.query()
.map((results) => {
return new LoadUsersSuccessAction(results);
}))
.catch(() => Observable.of(new LoadUsersFailureAction()));
Моя лучшая идея примерно такая:
@Effect loadUsers$ = this.actions$
.ofType('LOAD_USERS')
.withLatestFrom(this.store.select(state => state.visibleUsers.offset))
.switchMap(([action, state]) => {
//something that looks like this??
//this syntax is wrong and I can't figure out how to access the action payload
state.offset === payload.offset
? this.store.select(state => state.entities.users)
: this.userService.query()
}
.map((results) => {
return new LoadUsersSuccessAction(results);
}))
.catch(() => Observable.of(new LoadUsersFailureAction()));
Не уверен, как это сделать. Спасибо вперед.
catch
вswitchMap
. Наблюдаемое, возвращаемоеcatch
, будет завершено, и - за пределамиswitchMap
- это увидит завершение наблюдаемого эффекта, и эффект перестанет работать, если произойдет ошибка. - person cartant   schedule 07.04.2017