在条件下执行订阅内部的代码

时间:2016-12-02 07:52:16

标签: angular rxjs observable ngrx

我的angular2应用程序中有可观察的数据。该数据有2个属性

 {isFetching: false, user: {userID: 1, firstName: "john", lastName: "public"} }.

从服务器检索数据时,isFetching标志为true且user对象为null。在我的一个组件中,我需要通过可观察对象上的userID获取一些其他数据。最初,当observable被订阅时,用户对象为null。在我的代码中,我必须在执行其他操作之前检查用户是否为null。下面的代码可以工作,但我认为必须有比在subscribe块中有条件更好的方法。

this.store.select<UserProfileState>('user')
        .subscribe(user => {
            if (!user.isFetching) {
              this.store.dispatch(this.informationPanelActions.loadInformationPanel(user.user.clientID, user.user.userID));
            }
        });

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

当您使用Observable时,您可以使用过滤器:

this.store.select<UserProfileState>('user')
    .filter(user => !user.isFetching)
    .subscribe(user => {
        this.store.dispatch(this.informationPanelActions.loadInformationPanel(user.user.clientID, user.user.userID));
    });