Как установить переменную из вызова $ http, а затем использовать ее в остальной части приложения БЕЗ того, чтобы сделать все приложение асинхронным

У меня есть эти данные

{
  "config": {
    "RESTAPIURL": "http://myserver/myrestsite"
  }
}

и у меня есть эта фабрика, которая читает эти данные

'use strict';

angular.module('myApp').factory('api',
  ["$http", "$q",
  function ($http, $q) {

    function _getConfiguration() {
      var deferred = $q.defer();
      $http.get('/scripts/constants/config.json')
      .success(function (data) {
        deferred.resolve(data);
      })
      .error(function (data, status) {
        deferred.reject(data, status);
      });
      return deferred.promise;
    }

    function _restApiUrl() {
      // this doesn't work either. _getConfiguration() doesn't resolve here.
      return _getConfiguration().RESTAPIURL + '/api/';
    }

    return {
      URL: _restApiUrl
    }
  }
  ]
);

Затем использовать

'use strict';

angular.module('myApp').factory('AuthService', function ($http, $q, api,NotificationService) {

    function _get(creds) {

        var deferred = $q.defer();

        $http({method: 'GET', url: api.URL() + api.AUTH, headers: {
            'Authorization': 'Basic '+creds}
        })
        .success(function (data, status, results, headers) {
            deferred.resolve(results);
        })
        .error(function (data, status) {
            NotificationService.redirect(status);
            deferred.reject(data, status);
        });
        return deferred.promise;
    }

    return {
        get:_get
    };
});

Поэтому, когда я использую это, я делаюapi.URL() и это не работает.

Раньше это был жестко запрограммированный URL, поэтому называть егоapi.URL, Я действительно не хочу, чтобы пройти через все приложение и преобразовать все вapi.URL().then(...), Это было бы отстой.

Итак, как я могу записать это значение как «свойство» вместо асинхронного обещания, которое должно вызываться снова и снова?

Позвони один раз, хорошо. Получить значение. Положите это где-нибудь. Используйте значение. Никогда не называй$http снова после этого.

РЕДАКТИРОВАТЬ

Похоже, это один из самых успешных вопросов, которые я когда-либо задавал, и я с благодарностью рассматриваю каждый ответ по очереди. Спасибо каждому из вас.

Ответы на вопрос(4)

Ваш ответ на вопрос