我正在学习Angular 2和RxJS,觉得这可能是最简单的问题。我正在使用商店来保存用户'至。我想测试从Typescript端而不是Angular模板中查看它是否为空。
以下是相关的代码行。
public users: Observable<User[]>;
public store: Store<AppState>;
this.users = this.store.select(state => state.user);
if(!this.users) {
//DO THIS
}
我试过长度,== null,==未定义,无法找到如何测试这个看似基本的状态。任何帮助赞赏。
请注意,保存和检索用户到商店的工作正常。
答案 0 :(得分:2)
假设Store
按指示工作,它返回一个Observable。所以你收到的内容(this.users
)实际上并不是商店价值,而是一个输出该价值的流。
因此,要测试值是否为空,请不要测试流本身。相反,您订阅了流并观察了结果:
public users: User[];
// subscribing will actually trigger the fetch for user data
this.store.select(state => state.user)
.subscribe(data => this.onUsersEmitted(data));
// executed once user data arrives from the store
public onUsersEmitted(data:User[]){
this.users = data;
if(!data || !data.length){ /*empty data arrived*/}
}
答案 1 :(得分:2)
这就是我试图解决问题的方法
public store: Store<AppState>;
this.store.select(state => state.user)
.pipe(filter(users => users.length === 0))
.subscribe((users: Observable<User[]) => {
// DO THIS
});
希望这有帮助。