这个angularJS代码的目的是什么?

时间:2015-09-01 09:36:47

标签: javascript angularjs asynchronous drop-down-menu

有人可以向我解释这段代码的作用吗?我知道它会抓取国家并将它们推送到网页中显示的列表,但为什么呢?我认为$ 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);

    });

2 个答案:

答案 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 service documentation

$q.all([promise1, promise2, ...])

  

将多个承诺合并到一个在何时解决的承诺中   所有的输入承诺都得到了解决。

答案 1 :(得分:1)

service.query()将不可避免地返回promise,它会在异步调用完成时解析。将promise属性(你无疑会绑定到某种形式的列表)设置为promise是没有意义的。

代码正在做的是等待解析的承诺,执行某些逻辑,并将结果数据设置为范围属性。