Итак, у вас есть странный отложенный антипаттерн , в котором вы не используете обещание сборки, возвращаемое службой $ http , но вы также пытаетесь повторно использовать одно и то же обещание для нескольких запросов http (что невозможно - вы можете разрешить или отклонить обещание только один раз).
У вас есть следующий сервис:
srv.service("agentDetailService", function($http ,$q){
var deferred = $q.defer();
this.getId = function(url){
$http.get(url).then(function(data){
deferred.resolve(data);
})
}
this.getAgentDetail= function(){
return deferred.promise;
}
})
И хотя вы всегда возвращаете одно и то же обещание в agentDetailService.getAgentDetail()
, у вас есть вторая функция agentDetailService.getId()
, которая будет разрешать это обещание несколько раз (Если звонили не раз).
Вы можете решить эту проблему, используя обещание, которое было возвращено службой $http
:
srv.service("agentDetailService", function( $http ){
this.getAgentDetail = function(agent) {
// Return the promise of the $http call directly, we don't need '$q' service at all
return $http.get("http://localhost:9080/DAPortfolioServices-war/portfolio/v1/assign/" + agent).then(function( response ){
// By returning 'response.data' we only expose the actual data
// that was returned from the server
return response.data;
});
};
});
Тогда на вашем контроллере agentsCtrl
вам нужно разрешить обещание только один раз -Одно обещание на запрос:
app.controller("agentsCtrl",['$scope','agentsService','agentDetailService' ,function ($scope,agentsService,agentDetailService) {
//Obtains the id of Agente and inyect to url
$scope.info = function getId (agent){
agentDetailService.getAgentDetail(agent).then(function(data) {
$scope.pageNumber = 1;
$scope.items = [10,20,30];
$scope.selectPage=10;
// Note that I don't use 'data.data' here because the service is now responsible for that
$scope.agentsList = data;
});
}
}]);
Тот же самый отложенный антипаттерн применяется и ко второму сервису, поэтому вы должны также изменить его, используя тот же метод, который я продемонстрировал в agentDetailService