javascript - 为什么如果 `$q.all` 没有返回一个 Promise 数组,那么不会抛出异常吗?

标签 javascript angularjs asynchronous promise

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

主 Controller 内的功能:

$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()函数时,什么也没有发生。 bool $scope.loaded 不会在作用域上激活,并且不会引发异常(这正是我所期望的)。这是为什么?

我编辑了代码并让我的 Controller 函数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。请尝试逐步添加正确的代码,以免隐藏您的错误并删除代码中的错误。

关于javascript - 为什么如果 `$q.all` 没有返回一个 Promise 数组,那么不会抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34047777/

相关文章:

asynchronous - 如何在webpack中加载远程文件

javascript - Node JS - 文件写入/Http 请求真正异步

javascript - 根据用户输入在页面上创建金字塔结构图

javascript - 使用 JavaScript 获取媒体服务器 URL(无扩展名)的文件类型

javascript - 如何使用 AngularJS 填充复选框值列表?

python - 使用 asyncio 的多个循环

javascript - 有没有办法使用 javascript 或 Jquery 找出某人计算机上屏幕的宽度?

javascript - 获取属性不是函数的 Javascript 错误

javascript - 通过 Angular UI 模式更新复杂模型时遇到问题

javascript - 在扩展 Controller (ES6)中注入(inject)模块导致未知提供者错误