在firebase列表中的snapshotChanges()。subscribe之后返回值

时间:2019-01-30 20:47:36

标签: angular firebase angularfire2

我创建了以下函数,以便从firebase表中获取数据,包括记录的键:

  fetchUsers() {
    this.firebase.list('users').snapshotChanges()
      .subscribe(res => {
        this.userList = [];
        res.forEach(element => {
          var user = element.payload.toJSON();
          user["$key"] = element.key;
          this.userList.push(user as User);
        });
      });
  }

调用函数时如何返回userList数组?

2 个答案:

答案 0 :(得分:1)

您可以返回数组的一个可观察对象,然后订阅它。

fetchUsers(): Observable<User[]> {
  return this.firebase.list('users').snapshotChanges()
    .pipe(
      map(res => {
        return res.map(element => {
          let user = element.payload.toJSON();
          user["$key"] = element.key;
          return user as User;
        });
    }));
}

然后您可以从任何调用该方法的地方订阅该方法。

this.usersSubscription = this.dataService.fetchUsers.subscribe(users=> {

   this.users = users;
});

请记住不要在onDestroy上取消注册。

ngOnDestroy() {
  this.usersSubscription.unsubscribe();
}

查看此有效的stackblitz

答案 1 :(得分:0)

不要subscribe而是将map设为您要返回的值,这将从Observable返回一个fetchUsers,然后您可以通过{{ 1}}:

this.fetchUsers.subscribe((...) => ...)