首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ngrx Effects withLatestFrom导致异常

Ngrx Effects withLatestFrom导致异常
EN

Stack Overflow用户
提问于 2019-07-21 03:47:49
回答 1查看 584关注 0票数 1

我正在尝试分派一个操作,该操作将根据选定的出版商加载图书。

下面是effect类的示例:

代码语言:javascript
复制
@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”操作,也会发生异常:

代码语言:javascript
复制
core.js:15714 ERROR TypeError: Cannot read property 'library' of null

这似乎很奇怪,好像effect是在模块中注册effect时将可观察对象注册到存储中,而不是在调用'BOOK_LIST_REQUEST‘操作时注册。

这里会有什么问题呢?我是不是在这种效果下从存储中读取数据是不是错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-22 01:24:48

如果像在ngrx documentation example (collection.effects.ts)中一样,将withLatestFrom包装在concatMap运算符中,则此问题似乎已得到解决。

代码语言:javascript
复制
        ofType(BOOK_LIST_REQUEST),
        concatMap(action => of(action).pipe(
          withLatestFrom(this.store.pipe(
            select(selectBookshop), 
            map(bookshop => bookshop.library.publisher)
         )
       )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57128050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档