簡體   English   中英

是否可以同步調用ngResource?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM