Return snapshotChanges() 后的值。在 firebase 列表中订阅

Return value after snapshotChanges().subscribe in firebase list

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

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

调用函数时如何return userList 数组?

不要 subscribe 而是 map 到你想要的值 return,这将 return 来自 [=14= 的 Observable ] 然后您可以通过 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;
        });
      }));
  }

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

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