>>invoicesService.getMetaData().then(function (data) { >> $scope.invoicesMetaData = data; >> >> });>>
>>app.factory('invoicesService', ['$http', '$q', function($http, $q) { >> >> var metaData = null; >> >> var getMetaData = function () { >> if (angular.isObject(metaData)) >> return metaData; >> >> var deferred = $q.defer(); >> $http.get('/api/invoices/metadata') >> .success(function (data) { >> metaData = data; >> deferred.resolve(data); >> >> }) >> .error(function (data, status, header, config) { >> deferred.reject(status); >> }); >> return deferred.promise; >> };>>
app.factory('invoicesService', ['$http', '$q', function ($http, $q) { > > var metaData = null; > var inProcess = false; > var getMetaData = function () { > > while (inProcess === true) { > } > > if (angular.isObject(metaData)) > return metaData; > inProcess = true; > var deferred = $q.defer(); > $http.get('/api/invoices/metadata') > .success(function (data) { > metaData = data; > inProcess = false; > deferred.resolve(data); > > }) > .error(function (data, status, header, config) { > deferred.reject(status); > }); > return deferred.promise; > } > }]);Angular doesn't have a synchronous option for $http so an altenative would be to fall back to using a XMLHttpRequest synchronously:
var req = new XMLHttpRequest(); > req.open('GET', '/api/invoices/metadata', false); > req.send(null); > > if (req.status === 200) { > //etc........