有人可以向我解释这段代码的作用吗?我知道它会抓取国家并将它们推送到网页中显示的列表,但为什么呢?我认为$ scope.countries = service.query()就足够了或者这样可以避免异步问题吗?
$q.all([$scope.address.$promise, $scope.countrys.$promise]).then(function() {
if (!$scope.address.country.id) {
return $q.reject();
}
return Country.get({id : $scope.address.country.id}).$promise;
}).then(function(country) {
$scope.countrys.push(country);
});
答案 0 :(得分:5)
代码注释中的描述。这是使用promise机制的有条件数据加载过程。如果还不够,请尝试更详细地指出您的问题
// if address and countries was loaded (probably from ajax request)
$q.all([$scope.address.$promise, $scope.countrys.$promise]).then(function() {
// if address doesn't exist reject all actions
if (!$scope.address.country.id) {
return $q.reject();
}
// otherwise load country based on address field as a promise
return Country.get({id : $scope.address.country.id}).$promise;
}).then(function(country) {
// when loading process is finished add country to dataset
$scope.countrys.push(country);
});
$q.all([promise1, promise2, ...])
将多个承诺合并到一个在何时解决的承诺中 所有的输入承诺都得到了解决。
答案 1 :(得分:1)
service.query()
将不可避免地返回promise,它会在异步调用完成时解析。将promise属性(你无疑会绑定到某种形式的列表)设置为promise是没有意义的。
代码正在做的是等待解析的承诺,执行某些逻辑,并将结果数据设置为范围属性。