[英]Is it possible for ngResource to be called synchronously?
我目前有一個工廠,我用它來檢索配置文件。
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填充之后才開始?
你不能。 $ resource總是返回異步數據。 如果你想要同步數據,那么使用$ http而不是$ resource。
像這樣改變你的服務;
m.factory('clientConfig', function($http) {
var get = function {
$http.get('assets/config.json').success(function(data)){
return data.serverURL;
});
};
});
並致電服務;
clientConfig.get();
你不能。 由於JavaScript(大部分)是單線程的,因此阻塞操作非常少。 XHR不是其中之一。 沒有辦法讓它同步。
根據你的角度版本,你可以$ then或$承諾:
clientConfig.$then(function (){ do something})
要么
clientConfig.$promise.then(function () {do something else})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.