我正在尝试使用AngularFire2从Firebase数据库中总结一些值,并将它们用于我的组件逻辑中的进一步处理。 通过一些建议,我能够查询并减少所需的值(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 total = scoresObservable.subscribe(sum => {
result = sum;
console.log(`total for ${id}: ` + sum)
});
return result;
结果总是“未完成”'当第一次调用此块时。
答案 0 :(得分:0)
您传递到scoresObservable.subscribe
的函数不会立即被调用(当database.list
将检索数据时将调用它),因此订阅后result
中没有值。< / p>
如果要在模板中显示结果并且代码块在控制器内,那么您可以执行以下操作:
@Comopnent({
...
template: '{{ result }}'
...
})
class SomeComponent {
result: number;
...
someFunc() {
...
scoresObservable.subscribe(sum => {
this.result = sum;
console.log(`total for ${id}: ` + sum)
}
}
另请注意,subscribe
会返回订阅,total
看起来不合适。