为什么,如果`$ q.all`没有返回一个promises数组,是不是抛出异常?

时间:2015-12-02 16:24:17

标签: javascript angularjs asynchronous promise

除此之外,为什么在$scope之前设置的$q.all值被完全忽略?

主控制器内的功能:

$scope.apply = function (security) {

    var entity = shareDataService.getModalEntity();
    var depot = shareDataService.getModalDepot();
    $scope.loaded = false;
    var myDataPromise;

    if (entity == "NULL") {
        myDataPromise = getDataService.getDataFromREST(security);
    } else {
        myDataPromise = $q.all(getDataService.keepICorrect(security));
    };
    myDataPromise.then(function () {


                 //DO STUFF


}, function errorCallback(response) {

                    //DO MORE STUFF

    });
}

我服务中的keepICorrect()函数(这是一个闭包):

 keepICorrect: function (security) {

        var promises = [];
            for (var i = 0 ; i < entity.length; i++) {
                promises.push(this.getDataFromREST(security, i));
            }
         return promises;
    },

但是,执行$scope.apply()函数时,没有任何反应。布尔$scope.loaded没有在作用域上激活,也没有抛出异常(这正是我所期待的)。这是为什么?

我已经编辑了代码并使我的控​​制器功能Apply检查entity = "NULL"是否正确,这似乎解决了它是否是数组的问题。仍然没有回答我的问题,即如果q.all没有返回一个promises数组,为什么在调用它的函数中没有任何事情发生,即使调用q.all之前也是如此。

1 个答案:

答案 0 :(得分:0)

请注意Promise库包装了所附的括号代码中抛出的所有错误,因此建议您在将函数包装到promise机制之前测试它们。

在你的情况下:

keepICorrect: function (security) {

        var promises = [];
            for (var i = 0 ; i < entity.length; i++) {
                promises.push(this.getDataFromREST(security, i));
            }
         return promises;
    },

你说它是一个闭包,所以我认为this.getDataFromREST应该是undefined。请尝试逐步添加正确的代码,以免隐藏错误并删除代码中的错误。