我的控制器中有这段代码
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工厂方法。
任何解释都表示赞赏,因为我是角色的新人。
答案 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;
});