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.....)