As developers we often find ourselves doing things we shouldn’t be doing, and putting best practices aside for the sake of a “solution.” In my case I found myself needing data that was not in our API end point, because it was customized to suit another application’s needs. So I had to make another API call to get another piece of data. I initially tried nesting call 2 inside of of call 1’s promise, and it worked for what I needed to do, however that is too much stop and go traffic. So in comes $q.all
grabs your two requests in an array $q.all([promise1, promise2])
, and then chain your .then(function(response){})
of the requests. Once resolved you data comes back in an array [0]
or [1]
to do with what you please.
app.factory("fetch_data", ['$http', '$q', function($http, $q){
var deferred = $q.defer();
return {
getData: function(){
var promise1 = $http({method: 'GET', url: "/this/url/one", cache: 'true'}),
promise2 = $http({method: 'GET', url: "/this/url/two", cache: 'true'});
$q.all([promise1, promise2]).then(function(response){
deferred.resolve({channel: response[0].data,vendor: response[1].data});
},
function(data) {
deferred.resolve({channel: dummyData});
});
return deferred.promise;
}
}
}]);
I am mostly writing this for myself, as I know I will surely come back to this necessity once again, but also for anyone who may be looking for the solution to a double API call in Angular JS. Let me know if you have a way to improve it. I am always looking for critique, and other ways to do things.