从不同的promise工厂方法创建对象数组?

时间:2016-12-07 22:57:00

标签: angularjs

我的控制器中有这段代码

 dashboardFactory.totalCustomer().then(function (response){
    $scope.totalCustomer = response.data.count;
  }, function (error) {
    console.log(error);
  });

 dashboardFactory.totalPartner().then(function (response){
    $scope.totalPartner = response.data.count;
  }, function (error) {
    console.log(error);
  });


//below passed to html
$scope.charts = [{
  color: pieColor,
  description: 'Total Partner',
  stats: $scope.totalPartner,
  icon: 'person',
}, {
  color: pieColor,
  description: 'Jumlah Konsumen',
  stats: $scope.totalCustomer,
  icon: 'money',
}];

上面的代码结果为空,这是因为$ scope.charts在承诺尚未解决时创建了?

如果每个对象都具有来自不同promise工厂方法的属性,我如何从promise结果创建对象数组?所以渲染的页面不是空的。

上面的例子是2个对象,假设我有10个或更多的对象,每个对象都来自不同的promise工厂方法。

任何解释都表示赞赏,因为我是角色的新人。

1 个答案:

答案 0 :(得分:1)

使用$q.all()

var totalCustomerPromise = dashboardFactory.totalCustomer().then(function (response){
  return response.data.count;
});

var totalPartnerPromise = dashboardFactory.totalPartner().then(function (response){
  return response.data.count;
});

$q.all({
  totalCustomer: totalCustomerPromise,
  totalPartner: totalPartnerPromise
}).then(function(result) {
  $scope.charts = [{
    color: pieColor,
    description: 'Total Partner',
    stats: result.totalPartner,
    icon: 'person',
  }, 
  {
    color: pieColor,
    description: 'Jumlah Konsumen',
    stats: result.totalCustomer,
    icon: 'money',
  }];
});

或者,如果您不关心范围内的对象在解析Promise之前没有vaid统计信息,只需从传递给then()的回调中初始化其stats属性:

dashboardFactory.totalCustomer().then(function (response){
  $scope.charts[1].stats = response.data.count;
});