Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularfire数据库列表订阅的返回值_Javascript_Angular_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript angularfire数据库列表订阅的返回值

Javascript angularfire数据库列表订阅的返回值,javascript,angular,firebase,firebase-realtime-database,Javascript,Angular,Firebase,Firebase Realtime Database,我试图在我的“费用”列表中计算每笔交易的“金额”值 这是我的数据库: subscribe中的日志正常工作,总数为1700,但我无法从函数中获取“this.expenseListTotal”的值以在另一个组件中显示它。如何返回'this.expenseListTotal'值,以便在其他组件中使用 getExpenseListTotals(budgetId: string) { this.afd.list('users/' + this.cUser.uid + '/budgets/' +

我试图在我的“费用”列表中计算每笔交易的“金额”值

这是我的数据库:

subscribe中的日志正常工作,总数为1700,但我无法从函数中获取“this.expenseListTotal”的值以在另一个组件中显示它。如何返回'this.expenseListTotal'值,以便在其他组件中使用

getExpenseListTotals(budgetId: string) {    
 this.afd.list('users/' + this.cUser.uid + '/budgets/' + budgetId + '/expenses').subscribe(_data => {       
   this.expenseListTotal = _data.reduce((sum, item) =>sum+item.amount,0);
  console.log("expennse list total = ",this.expenseListTotal, typeof this.expenseListTotal);
 });
}
在职:

getExpenseListTotals(budgetId: string) {

return new Promise(resolve => {
  this.total = this.afd.list('users/' + this.cUser.uid + '/budgets/' + budgetId + '/expenses').subscribe((_data) => {


    this.expenseListTotal =  _data.reduce((sum, item) =>sum+item.amount,0);
    resolve(this.expenseListTotal);


  });

  })
}
在组件中:

this.total = this.budgetService.getExpenseListTotals(this.budgetId);
this.total.then(function(value){
 console.log(value)
});

你在控制台里得到了什么?任何错误或无效??它记录了“1700”值,这是两个事务的总和,然后只需添加
返回此值即可。expenseListTotal在console.log()之后;我试过了。那是行不通的。我在下面想出了一个解决办法。非常感谢。