Firebase 检索数据和 return 作为类型数组 - 我的解决方案

Firebase Retrieve Data and return as array of type - my solution

我最近开始将我的 iOS 应用程序移动为网络应用程序。我不知道这个实现是否正确。它有效,但如果有人可以让我知道它是否正确。

这是我的 LicenceService 中的函数:

get retriveLicences():Licence[] {

const licences: Licence[] = [];

this.afDatabase.list(this.basePath).valueChanges().subscribe((snapshot) => {
  snapshot.forEach(element => {

    const licenceObject = <any>element

    licences.push(
      new Licence(
        licenceObject.name, 
        licenceObject.logoUrl, 
        licenceObject.maxUsers, 
        licenceObject.currentUserCount, 
        licenceObject.startDate, 
        licenceObject.endDate
      )
    );
  });
});

return licences
}

使用 rxjs 运算符,您可以 "transform" 订阅前的快照:

getLicences(): Observable<Licence[]> {
  return this.afDatabase
  .list(`/whatever`)
  .valueChanges()
  .map(licenceObjects => {
    return licenceObjects.map(licenceObject => new Licence(
      licenceObject.name, 
      licenceObject.logoUrl, 
      licenceObject.maxUsers, 
      licenceObject.currentUserCount, 
      licenceObject.startDate, 
      licenceObject.endDate
    ));
  })
}

但是,如果您使用数据库中的确切变量名称创建接口,您的生活会变得容易得多,因为 angularfire2 会为您转换它:

interface Licence {
  name: string;
  logoUrl: string;
  maxUsers: number;
  currentUserCount: number;
  startDate: number;
  endDate: number;
}

getLicences(): Observable<Licence[]> {
  return this.afDatabase.list<Licence>(`/whatever`).valueChanges();
}

所以现在在您的组件中,您可以从服务中获取可观察对象并使用异步管道或任何对您的应用程序更有意义的方式对其进行解包。 希望对您有所帮助!