Majid Nayyeri
Majid Nayyeri

Reputation: 444

Multiple http.get in service

I wanna use multiple ( in this case, 2 ) $http.gets in my service !

As you know the simple form of using $http.get is this :

  app.factory('MyService', function ($http, $q) {
    return {
      getData: function() {
        return $http.get('myfile.json')
          .then(function(response) {
          return response.data;
        });
      }
    };
  });

Now I wanna use 2 files ( 2 $http.gets ) and compare them to each other ( with some for loops and etc that I can ... ) !

What can I do now ? :(

Upvotes: 1

Views: 1232

Answers (2)

faizal vasaya
faizal vasaya

Reputation: 492

It is an extension of Hajji Tarik's solution. I was able to derive from your comments that you were still not clear with what to code in where. So I have developed a sample application which will assist you for the same.

//--app.module.js--//
angular.module('notesApp', []);

//--app.service.js--//
angular.module('notesApp')
  .factory('notesFactory', ['$http',
    function($http) {
      var notesService = {};
      notesService.getData = function(url, method) {
        return $http({
          url: url,
          method: method
        });
      }
      return notesService;
    }
  ]);

//--app.controller.js--//
angular.module('notesApp')
  .controller('MainController', ['$scope', '$http', '$log', '$q', 'notesFactory',
    function($scope, $http, $log, $q, notesFactory) {
      $scope.data = {};
      var data1 = notesFactory.getData('http://localhost:3000/api/notes/1', 'GET');
      var data2 = notesFactory.getData('http://localhost:3000/api/notes/2', 'GET');
      var combinedData = $q.all({
        firstResponse: data1,
        secondResponse: data2
      });
      combinedData.then(function(response) {
        $log.log(response.firstResponse.data);
        $log.log(response.secondResponse.data);
        //Write your comparison code here for comparing json results.
      }, function(error) {
        $scope.data = error;
      });
    }
  ]);
<html ng-app='notesApp'>

<head>
  <title>
    Notes Application
  </title>
</head>

<body>
  <div ng-controller='MainController'>

  </div>



  <script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js'></script>
  <script src='app.module.js'></script>
  <script src='app.controller.js'></script>
  <script src='app.service.js'></script>
</body>

</html>

Upvotes: 2

Hajji Tarik
Hajji Tarik

Reputation: 1082

use $q.all.

Add $q to controller's dependencies, exemple

$scope.req1 = $http.get('myfile.json');
$scope.req2 = $http.get('myfile2.json');

$q.all([$scope.req1, $scope.req2]).then(function(data) {
   // data is array of your files

   if ( JSON.stringify(data[0]) === JSON.stringify(data[1])){
      console.log('is equal');
   }
});

Upvotes: 2

Related Questions