FirebaseListObservable

FirebaseListObservable

我想从firebase实时数据库中获取所有用户,并按score属性对他们进行排序。我可以用变量
users: FirebaseListObservable<any[]>;
但我有错误:

Type 'Observable<any[]>' is not assignable to type 'FirebaseListObservable<any[]>'.
Property '_ref' is missing in type 'Observable<any[]>'.

如果我把变量改成
users: Observable<any[]>;
然后错误就消失了,但是我不能使用像.push().update()这样的angularfire方法。
我的取数和排序代码(有效)如下:
this.users = this.af.database.list('/users')
  .map(items => items.sort((a, b) => b.score - a.score));

如果您能提供任何建议,以避免出现错误,或者提供任何更好的方法,我将不胜感激,谢谢!

最佳答案

FirebaseListObservable实现了lift,因此rxjs操作符(比如map)将返回一个FirebaseListObservable实例。
只是-当使用typescript时-rxjs操作符是静态类型的以返回Observable,所以您必须转换为FirebaseListObservable。(使用rxjs不必涉及typescript,如果您查看the guidance for adding operators就会发现没有提到类型。)
通过查找问题中提到的FirebaseListObservablepush函数,可以验证是否返回了update实例:

this.users = this.af.database
  .list('/users')
  .map(items => items.sort((a, b) => b.score - a.score)) as FirebaseListObservable<any[]>;
console.log(this.users.push.toString());
console.log(this.users.update.toString());

但是,请注意,这对于创建为查询的FirebaseListObservable实例不起作用。对于这种情况有一个as-yet-unanswered question

08-16 03:54