【问题标题】:FirebaseListObservable and flatMapFirebaseListObservable 和 flatMap
【发布时间】:2017-10-09 20:59:49
【问题描述】:

我想要一个依赖于另一个可观察值的可观察值。很简单,就是找不到方法

user$: Observable<firebase.User>;
playlists$: FirebaseListObservable<any>;

constructor(db: AngularFireDatabase,
          private afAuth: AngularFireAuth) {
    this.user$ = afAuth.authState;
    // error
    this.playlists$ = this.user$.flatMap(user => db.list(`/playlists/${user.uid}`));
}

我得到的错误是:“Observable”不可分配给“FirebaseListObservable”类型。 “Observable”类型中缺少属性“$ref”。

【问题讨论】:

  • 您将playlists$ 输入为FirebaseListObservable,但flatMap 返回Observable..
  • 是的,因为db.list 返回一个FirebaseListObservable,我需要一个这个对象类型。你认为我需要订阅user$ 的可观察对象然后创建playlists$ 可观察对象吗? (删除平面地图)
  • 只需将playlists$ 声明为Observable。这就是来自flatMap 的反馈。
  • ... 或者,如果您执行以下操作会发生什么情况:this.user$.subscribe(user =&gt; this.playlists$ = db.list(/playlists/${user.uid}));?
  • @developer033 这是做这种链式可观察对象的不推荐方式。

标签: angular typescript firebase rxjs observable


【解决方案1】:

注解playlists$: FirebaseListObservable&lt;any&gt;; 应该是playlists$: Observable&lt;any&gt;;

这是flatMap 返回的内容。如果您想将flatMap 的结果存储在一个变量中,那么这就是您应该拥有的类型注释。

【讨论】:

  • 问题是,FirebaseListObservable 包含其他方法,如 push,如果我替换为 Observable,Typescript 会抱怨方法 push 在 Observable 类型中不存在
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
相关资源
最近更新 更多