我必须严重误解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
。
有人可以在这里向我指出正确的方向吗?我需要订阅组件而不是服务吗?
答案 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); })
}