angularfirebase2 列表查询返回未定义

angularfirebase2 list query returning undefined

我一定是对 RxJs 和 AngularFirebase2 有严重的误解,因为我无法弄清楚这个错误。

我有一个 firebase 列表,我正在使用服务中的函数进行查询,如下所示:

 returnAuthor(id) {
    this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); return data })
}

returnAuthor 中的 console.log(data) 生成了正确的数据,但我的模板 returns undefined 中的 {{ returnAuthor(id) }} 生成了正确的数据。 运行 returnAuthor 在我的组件中也 returns undefined.

有人可以在这里为我指明正确的方向吗?我需要订阅组件而不是服务吗?

您的方法 return 未定义,因为您没有 return 从函数中获取结果。 要 return 结果,您的函数将如下所示

returnAuthor(id) {
  return this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); return data })
}

但是 return 这样 return 订阅不是数据。如果您想要订阅中的数据,您可以声明一个变量并将订阅中的数据 return 设置到它。像这样

在你的class

dataVariable;

    returnAuthor(id) {
      this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); this.dataVariable = data })
    }

现在订阅中可用的数据将传递到您可以使用的dataVariable

如果你想在数据到达时将数据传递给另一个方法,你可以在订阅中调用该方法。像这样

returnAuthor(id) {
   this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); anotherMethod(data); })
}