javascript - angularfirebase2列表查询返回未定义

标签 javascript firebase firebase-realtime-database rxjs angularfire2

我一定是严重误解了 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) 生成正确的数据,但我的模板中的 {{ returnAuthor(id) }}返回未定义。在我的组件中运行 returnAuthor 也会返回 undefined

有人可以给我指出正确的方向吗?我需要订阅组件而不是服务吗?

最佳答案

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

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

但是像这样返回将返回订阅而不是数据。如果您想要来自订阅的数据,您可以声明一个变量并将订阅返回的数据设置给它。像这样的事情

在你的类(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); })
}

关于javascript - angularfirebase2列表查询返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51834319/

相关文章:

swift - 实现后台位置更新后,FCM 变得疯狂,并且在没有编程触发的情况下连续发送

swift - TableView 不打印任何单元格(快速)

javascript - 我的链式 POST 和 GET axios 调用变慢是很自然的吗?

javascript - 我怎样才能从 angularjs 中的 datetimepicker 中只选择日期?

javascript - 循环遍历表以生成 json

javascript - 如何将单个 CSS 样式存储在数据库中?

android - Firebase createUserWithEmailAndPassword 不起作用

javascript - 如何调用嵌套在 forEach 循环内的 Javascript 函数

数据更改后的 Android FirebaseDatabase,值显示两次

iOS Firebase 数据库安全。创建新的应用程序用户 : Checking for Existence of Username