angularfirebase2列表查询返回未定义

时间:2018-08-14 05:34:43

标签: 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 })
}

console.log(data)中的returnAuthor产生正确的数据,但是模板中的{{ returnAuthor(id) }}返回undefined。在我的组件中运行returnAuthor也会返回undefined

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

1 个答案:

答案 0 :(得分:2)

您的方法返回undefined,因为您没有从函数中返回结果。 要返回结果,您的函数将如下所示:

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

但是这样返回将返回订阅,而不是数据。如果要从订阅中获取数据,则可以声明一个变量并将从订阅中返回的数据设置为该变量。像这样

您班上的

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); })
}
相关问题