【问题标题】:How to query Firebase once and store that return value in local parameter?如何查询一次 Firebase 并将返回值存储在本地参数中?
【发布时间】:2017-04-27 10:10:36
【问题描述】:

我正在尝试使用 AngularFire2 总结 Firebase-Database 中的一些值,并将它们用于在我的组件逻辑中进行进一步处理。 通过一些建议,我能够查询并减少所需的值 (How to map and reduce child values from FirebaseListObservable),但是当我尝试将它们放入局部变量中进​​行进一步处理时,在第一次运行时,该值始终未定义。

我尝试使用 first() 来确保 observable 只运行一次并且没有结果。

我怎样才能得到那个值只有一次说,当一个按钮被点击?

这是我的代码:

//sum up scores for questions belonging to category 'id'
...
let scoresObservable = this.dbRef.database.list(`/question-answers/${id}`)
                        .first()
                        .map((array) => array.reduce((acc, element) => 
                                        acc + element.$value, 0));
let result;
let sub  = scoresObservable.subscribe(sum => {
                result = sum;
                console.log(`total for ${id}: ` + sum)
             });
return result;

第一次调用此块时,该结果始终为“未定义”。

【问题讨论】:

    标签: angular rxjs angularfire2


    【解决方案1】:

    您传递给scoresObservable.subscribe 的函数不会立即被调用(它会在database.list 检索数据时调用)所以订阅后result 中没有任何值。

    如果您想在模板中显示结果并且代码块在控制器内部,那么您可以执行以下操作:

    @Comopnent({
      ...
      template: '{{ result }}'
      ...
    })
    class SomeComponent {
      result: number;
    
      ...
    
      someFunc() {
        ...
    
        scoresObservable.subscribe(sum => {
          this.result = sum;
          console.log(`total for ${id}: ` + sum)
        }
    }
    

    另外,请注意subscribe 返回订阅,而total 看起来不适合它的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多