2013-08-22 55 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(); 
相關問題