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

问题描述 投票:1回答:2

我创建了以下函数,以便从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数组?

angular firebase angularfire2
2个回答
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


0
投票

不要subscribe而是map到你想要返回的值,这将从Observable返回fetchUsers,然后你可以通过this.fetchUsers.subscribe((...) => ...)订阅:

fetchUsers() {
    return this.firebase.list('users').snapshotChanges()
      .pipe(map((res) => {
        this.userList = [];
        res.forEach(element => {
          var user = element.payload.toJSON();
          user["$key"] = element.key;
          this.userList.push(user as User);
          return this.userList;
        });
      }));
  }
© www.soinside.com 2019 - 2024. All rights reserved.