RxJS - 测试空的Observable数组

时间:2016-10-11 21:55:59

标签: angular rxjs ngrx

我正在学习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,==未定义,无法找到如何测试这个看似基本的状态。任何帮助赞赏。

请注意,保存和检索用户到商店的工作正常。

2 个答案:

答案 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
  });

希望这有帮助。