var deferred = null; > > function getMetaData() { > > if (deferred !== undefined) { > return deferred.promise; > } > > deferred = $q.defer(); > if (service.metaData) > deferred.resolve(service.metaData); > else { > service.inProcess = true; > $http.get('/api/invoices/metadata') > .success(function (data) { > service.metaData = data; > service.inProcess = false; > deferred.resolve(data); > > }) > .error(function (data, status, header, config) { > deferred.reject(status); > }); > } > return deferred.promise; > };(Tried this briefly. Seems to work - i.e. two results; one call to the server.....)