【问题标题】:angularfirebase2 list query returning undefinedangularfirebase2 列表查询返回未定义
【发布时间】:2019-01-20 21:23:55
【问题描述】:

我一定是严重误解了 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) }} 返回undefined。在我的组件中运行 returnAuthor 也会返回 undefined

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

【问题讨论】:

    标签: javascript firebase firebase-realtime-database rxjs angularfire2


    【解决方案1】:

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

    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); })
    }
    

    【讨论】:

    • 这很有意义,谢谢。我应该发现我实际上没有返回任何东西。我仍然很困惑。我尝试让函数像这样returnAuthor(id) { return this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges() } 返回可观察对象,然后我想我可以在我的模板中使用{{ returnAuthor(id) | async }} 但它只是再次返回null(即使显式订阅它并记录产生的结果正确的值)。
    • 由于 this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges() 返回一个 observable,使用 async 管道应该可以工作。我不知道为什么它在你的情况下不起作用。对不起。如果它回答了您的问题,请记住接受答案
    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2021-08-04
    • 1970-01-01
    • 2016-06-25
    • 2021-08-25
    相关资源
    最近更新 更多