Angular$q返回promise两次$http服务调用
Angular $q returning promise twice $http service call
我是一个非常新的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已经是一个承诺,$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);
}
}]);
然后你可以在你的控制器中使用它
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) {...}));
}]);
简单的服务示例
.service("functionName",function($http,$q) {
var abcObject = {}; //name of object you wanted to return
var abc; //you can use $scope.abc
abcObject.getValues = function () {
var d = $q.defer(); //A new instance of deferred is constructed by calling $q.defer().
$http.get('api.json').then(
function success(response) {
abc = response.data; // store the response into the abc
d.resolve(abc); //return success
},
function failure(reason) {
d.reject(reason);//return failure
});
return d.promise;//return result
return abcObject;//return object of success or failure
});
控制器
.controller('CtrName', function(functionName){
$scope.data = functionName.getValues();
});
相关文章:
- $http服务未触发成功或错误回调
- Http服务工厂将未定义的返回到Angular中的控制器
- 在http服务单元测试中使用request-js时,chai.request不是一个函数
- Angular $http 服务不加载 json 文件
- 在 angularJs 中从控制器调用同时$http服务
- Angular 中的 HTTP 服务将 POST 数据作为请求正文的键发送,没有值
- AngularJS$http服务中的encodeURIComponent
- 从服务器获取数据,并使用$http服务和ng-change在select事件上显示它
- 如何在AngularJS中动态更改$http服务URL
- 如何在Angular中设置异步HTTP服务的回调,以便在不定义数组的情况下在控制器中填充数组
- Angular-使用httpBackend测试http服务会引发意外异常
- 如何在有角度的$http服务请求中将JSONP指定为dataType
- 使用$http服务将数据发布到本地 json 文件时未发现错误
- ES6 发电机与$http服务
- Angular JS:在HTTP服务(POST)中传递输入参数
- 使用 angular 的 $http 服务来调用 js 文件
- AngularJS - 将then()与$http服务一起使用
- AngularJS$http服务中的调用,返回解析的数据,而不是承诺
- 如果可能的话,我应该使用 angularjs $http服务来处理请求还是 jquery ajax
- 如何将异常从 PHP 抛出到 Angular $http 服务