0

我目前有一个工厂,我用它来检索配置文件。

  m.factory('clientConfig', function($resource) {
    var r;
    r = $resource('assets/config.json', {}, {
      query: {
        method: 'GET'
      },
      isArray: false
    });
    return r.query();
  });

配置文件是一个 json 文件,其中包含 nodeJS 服务器的位置。在我的本地环境中,json文件是

{
    "serverURL": "http://localhost\\:3000"
}

当我在首页上启动我的应用程序时,这很好。前端页面加载clientConfig模块,任何后续页面只使用clientConfig模块,如下所示,没有任何问题

m.factory('House', function($resource, clientConfig) {
    return $resource(clientConfig.serverURL + '/houses/:houseId',
...

我遇到的问题是,如果我在一个立即想要从服务器加载数据的页面上进入该站点。在这种情况下,因为 clientConfig 尚未填充并且仍然为空,这会填满我的 $resource(clientConfig.serverURL + '/houses/:houseId' 调用。

我的问题是是否可以同步加载 clientConfig 或者至少在填充 clientConfig 之后才能启动我的应用程序?

4

2 回答 2

1

你不能。$resource 总是返回异步数据。如果您想要同步数据,请使用 $http 而不是 $resource。

像这样改变你的服务;

         m.factory('clientConfig', function($http) {
        var get = function {
        $http.get('assets/config.json').success(function(data)){
                return data.serverURL;
});
    };

        });

并像这样调用服务;

clientConfig.get();
于 2013-08-22T14:02:13.143 回答
1

你不能。由于 JavaScript(大部分)是单线程的,因此阻塞操作非常少。XHR 不是其中之一。没有办法让它同步。

根据您的角度版本,您可以 $then 或 $promise 它:

clientConfig.$then(function (){ do something})

或者

clientConfig.$promise.then(function () {do something else})
于 2013-08-22T14:08:04.717 回答