我正在尝试分派一个操作,该操作将根据选定的出版商加载图书。
下面是effect类的示例:
@Injectable()
export class LibraryEffects {
@Effect({})
bookRequest = this.actions.pipe(
ofType(BOOK_LIST_REQUEST),
withLatestFrom(
this.store.pipe(
select(selectBookshop),
map(bookshop => bookshop.library.publisher),
)
),
map(([action, publisher]) => {
window.console.log(action, publisher);
return new BookRequestSuccess();
})
);
constructor(
private actions: Actions,
private store: Store<AppState>
) {}
}当应用程序启动时,存储中既不包含也不包含'bookshop‘,也不包含'library’属性,这些属性稍后会被用户操作填充。之后,用户触发“BOOK_LIST_REQUEST”操作,并应检索相应的图书列表。
但是,一旦注册了effect,即使没有调用应该订阅存储中的“library”属性的“BOOK_LIST_REQUEST”操作,也会发生异常:
core.js:15714 ERROR TypeError: Cannot read property 'library' of null这似乎很奇怪,好像effect是在模块中注册effect时将可观察对象注册到存储中,而不是在调用'BOOK_LIST_REQUEST‘操作时注册。
这里会有什么问题呢?我是不是在这种效果下从存储中读取数据是不是错了?
发布于 2019-07-22 01:24:48
如果像在ngrx documentation example (collection.effects.ts)中一样,将withLatestFrom包装在concatMap运算符中,则此问题似乎已得到解决。
ofType(BOOK_LIST_REQUEST),
concatMap(action => of(action).pipe(
withLatestFrom(this.store.pipe(
select(selectBookshop),
map(bookshop => bookshop.library.publisher)
)
)https://stackoverflow.com/questions/57128050
复制相似问题