javascript - Angular $q 返回 promise 两次 $http 服务调用

标签 javascript angularjs

我是非常新的 Angular js,这里尝试为默认加载数据创建服务。我当前的函数循环遍历每个 api URL,并将每个 URL 推送到一个数组中,然后推送。我有这个功能,返回数组,需要将其展平。为什么会被记录两次?

cat.service('defaultload', [ '$http', '$q', '$rootScope',function($http, $q, $rootScope){
    this.getdefaultload = function(){
        var deferred = $q.defer();
        var defaulturl = ["/cat_questionWithAnswers", "/cat_user_template", "/cat_evaluation", "/cat_newForm", "/cat_sub_key_template_1"];
        var collectdefaultdata = [];
        angular.forEach(defaulturl, function(url, index){
            console.log( $rootScope.serviceURL + url + " ---- "+ index);
            collectdefaultdata.push($http.get($rootScope.serviceURL+url));
        });
        $q.all(collectdefaultdata).then(function(results){
        deferred.resolve(JSON.stringify(results));
        console.log(JSON.stringify(results, null, 2));
    });
    return deferred.promise;
    }
}]);

cat.controller('Loginctrl', ['$scope', '$rootScope','$state','$log','$http','defaultload', function($scope, $rootScope, $state, $log, $http, defaultload){

    $rootScope.serviceURL = 'https://dummy.com';
    defaultload.getdefaultload();

}]);

最佳答案

你正在加倍使用 Promise。 $http 已经是一个 promise ,因此 $q.all

也是如此
cat.service('defaultload', [ '$http', '$q', '$rootScope',function($http, $q, $rootScope){
    this.getdefaultload = function(){
        var defaulturl = ["/cat_questionWithAnswers", "/cat_user_template", "/cat_evaluation", "/cat_newForm", "/cat_sub_key_template_1"];
        var collectdefaultdata = [];
        angular.forEach(defaulturl, function(url, index){
            console.log( $rootScope.serviceURL + url + " ---- "+ index);
            collectdefaultdata.push($http.get($rootScope.serviceURL+url));
        });
        return $q.all(collectdefaultdata);
    }
}]);

然后您可以在 Controller 中使用它

cat.controller('Loginctrl', ['$scope', '$rootScope','$state','$log','$http','defaultload', function($scope, $rootScope, $state, $log, $http, defaultload){

    $rootScope.serviceURL = 'https://dummy.com';
    defaultload.getdefaultload()
    .then(function(results) {...}));

}]);

关于javascript - Angular $q 返回 promise 两次 $http 服务调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34737689/

相关文章:

javascript - 使用另一个数组的对象键过滤一个对象

javascript - vis.js 层级布局中的层级排序

javascript - 选择项目时,AngularJS 选择框选项消失

php - 为什么只有一些 mysqli 查询有效?

angularjs - 启动 AngularJS + 云端点

javascript - 在 Angular 中重新加载数据

javascript - 即使在 <script> 引用中也未定义函数

javascript - 无法让 fadeIn() 在 addClass 上工作

javascript - 如何传递api ID和api Key作为HTTP请求的认证参数

javascript - Ionic css 代码不适用于 ionic 卡或按钮