0

I have created an angular service using factory but when I call my service I see in the browser console that my service is being called two times and I didn't know why?

This my service code: enqueteurService.js

'use strict';
appMain.factory('enqueteur', function($http, $log,$q) {

      var deffered = $q.defer();
      var data = [];  
      var enqueteur = {};

      enqueteur.async = function() {
        $http.get('/Gnrqst/enqueteurs/liste-enqueteurs.do')
        .success(function (response) {
          data = response;
          $log.log(response);
          deffered.resolve();
        });
        return deffered.promise;
      };
      enqueteur.getAllEnqueteurs = function() { return data; };

      return enqueteur;
});

And this is my controller code : enqueteurController.js

'use strict' ;
appMain.controller('EnqueteurController', ['$scope','$http','$log','enqueteur', function ($scope,$http,$log,enqueteur) {

      enqueteur.async().then(function(data) {
        $scope.enqueteurs = enqueteur.getAllEnqueteurs();
      });

 }]);

And this is the part in my jsp page where I use my service :

<tbody>
<tr ng-repeat="enqueteur in enqueteurs">
<td>{{enqueteur.id}}</td>
<td>{{enqueteur.nom}}</td>
<td>{{enqueteur.prenom}}</td>
<td>{{enqueteur.telephone}}</td>
<td>{{enqueteur.email}}</td>
</tr>
</tbody>

My scripts are :

<script src="<c:url value="/resources/js/angular.js" />"></script>
<!-- ui-bootstrap js -->
<script src="<c:url value="/resources/js/ui-bootstrap.js" />"></script>
<!-- App js -->
<script src="<c:url value="/resources/js/app.js" />"></script>
<!-- enqueteur services js -->
<script src="<c:url value="/resources/js/services/enqueteurService.js" />"></script>
<!-- enqueteurController js -->
<script src="<c:url value="/resources/js/enqueteurController.js" />"></script>

My code works well, but in the browser console, I see that my service is being called twice? Can someone explain to me why?

This the console log :

angular consume web service rest

e2rabi
  • 4,728
  • 9
  • 42
  • 69
  • 6
    Would bet you have more than one instance of that controller being initialized – charlietfl May 01 '17 at 00:26
  • 2
    In chrome or similar, place a breakpoint on line 4 of the controller - `enqueteur.async()`. If the debugger is halted twice, it'll confirm that there's multiple instances of the controller in the page, which I'm confident is the case. – Thomas Maddocks May 01 '17 at 00:36
  • 2
    You have implemented the [deferred anti-pattern](http://stackoverflow.com/questions/30750207/is-this-a-deferred-antipattern) (that's not a good thing) – Phil May 01 '17 at 06:44
  • 2
    @charlietfl you see this happen when people mix a router and `ng-controller` – Phil May 01 '17 at 06:52
  • 1
    The [`.success` method has been deprecated and removed from AngularJS v1.6](http://stackoverflow.com/questions/35329384/why-are-angular-http-success-error-methods-deprecated-removed-from-v1-6/35331339#35331339) because it encouraged error- prone code like using `$q.defer` when it is not needed. The code in fact does not work well because the $q.defer will hang if the HTTP request fails. – georgeawg May 01 '17 at 17:06
  • @charlietfl Yes I found the probleme is that I have two instance of my controller in the same page Thank u all – e2rabi May 01 '17 at 17:12

0 Answers0