2013-08-22 54 views
0

我目前有一个工厂,我正在使用它来检索配置文件。是否可以同步调用ngResource?

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尚未填充,仍然是空的,这填补了我的$资源(clientConfig.serverURL +'/ houses /:houseId'调用。

我的问题是可以加载clientConfig同步或至少还没有开始我的应用程序clientConfig已被填充后,直到?

回答

1

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

根据您的角度版本,您可以$然后或$答应呢:

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

clientConfig.$promise.then(function() {do something else}) 
1

你不能。$资源总是返回异步数据。如果你想同步数据,那么用它代替$资源$ HTTP。

更改像这样的服务;

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

     }); 

并称之为服务;

clientConfig.get(); 
相关问题