为什么,如果“$q.all”没有返回一个promise数组,则是一个未抛出的异常

Why, if `$q.all` is not returned an array of promises, is an exception not thrown?

本文关键字:一个 数组 promise 异常 如果 all 返回 为什么      更新时间:2023-09-26

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

主控制器内的功能:

$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没有返回一个promise数组,那么即使在q.all被调用之前,它被调用的函数中也不会发生任何事情。

请注意,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。请尝试逐步添加正确的代码,以免隐藏错误并删除代码中的错误。