Angularjs-数组中控制器中的对象值总和

Angularjs-数组中控制器中的对象值总和,angularjs,mongodb,function,controller,sum,Angularjs,Mongodb,Function,Controller,Sum,我试图从控制器中的对象数组中获取成本和。我从mongo收藏中得到了这个阵列 vm.costs = CostsService.query(); 然后调用一个函数来计算成本总和 vm.sum = function (items, prop) { console.log(items); return items.reduce(function (a, b) { return a + b[prop]; }, 0); }; vm.costTotal = vm.sum(vm.co

我试图从控制器中的对象数组中获取成本和。我从mongo收藏中得到了这个阵列

vm.costs = CostsService.query();
然后调用一个函数来计算成本总和

  vm.sum = function (items, prop) {
  console.log(items);
  return items.reduce(function (a, b) {
    return a + b[prop];
  }, 0);
};

vm.costTotal = vm.sum(vm.costs, 'costprice');
我不知道为什么我得到的是0值而不是成本的实际总和。 我在Chrome浏览器的控制台中检查了这些项目,但列表显示的方式是正确的

有一件有趣的事情,如果我加入控制器硬编码数组,然后调用sum函数,一切看起来都很好。我认为这个问题在mongo的数组中,但我不知道如何得到这个成本总额

我的服务方法如下:

//用于与REST端点通信的成本服务
(功能(){
"严格使用",;
有棱角的
.模块(“成本”)
.工厂(“成本服务”,成本服务);
CostsService.$inject=['$resource'];
功能成本服务($resource){
返回$resource('api/costs/:costId'{
costId:“@_id”
}, {
更新:{
方法:“放”
}
});
}

}());
这可能是因为您的
成本服务
可能会重新执行
承诺
解决
成本
而不是直接使用
成本
数组。要解决这个问题,您需要调用
内的
vm.sum
。然后调用承诺返回服务调用的
。像这样:

  vm.sum = function(items, prop) {
    console.log(items);
    return items.reduce(function(a, b) {
      return a + b[prop];
    }, 0);
  };

  CostsService.query().$promise.then(function(costs) {
    vm.costs = costs;
    vm.costTotal = vm.sum(costs, 'costprice');
  });

是的,您有权返回承诺,但当我尝试使用.then(function(costs){…})执行此操作时,我出现了一个错误。then不是一个函数。@BogusławBoczkowski您也可以共享您的服务代码吗?我想这是因为你得到了这个error@BogusławBoczkowski现在检查一下。对于
$resource
,我们需要添加
$promise
,就像我在答案中更新的那样。另外,删除你的服务作为答案,你可以编辑你的问题并把它放在那里