2014-03-13 459 views
2

我已經安裝了AngularJS resourceAngularJS - 如何處理的承諾正確

app.factory('gridData', function($resource) { 
     var csrf = 'asdf'; 
     return $resource('/my/url/:expID', {expID:'@id'},{ 
       get: {method:'GET'}, 
       query: {method:'GET', isArray:true}, 
       save:{method:'POST', headers: {'X-CSRFToken' : csrf }} 
      }); 
}); 

我注射gridData資源爲我的控制器,並用它來從服務器獲取數據:

 gridData.query(function(result) { 
      console.log("result is"); 
      console.log(result); 
      $scope.data = result; 
     }); 

這種方法使用AngularJS 1.3可以正常工作。 console.log(result)語句顯示收到的實際數據。

現在我試着降級到AngularJS 1.2.11,自console.log(result)打印出承諾以來,我遇到了問題,如picture所示。因此$scope.data被設置爲承諾,但實際上我只需要在實際數據可用時設置$ scope.data。

這是因爲在1.3和1.2之間的某些版本中已經引入了Angular。任何想法如何處理這種情況/正確處理承諾?

回答

0

查看the docs on the $q service中標題爲「The Promise API」的部分。您還可以在Angular Promises上結賬this video

你需要知道的主要方法是.then。以下是如何使用此方法重構代碼的示例:

gridData.query(function(promise) { 
      promise.then(function (result) { 
       console.log("result is"); 
       console.log(result); 
       $scope.data = result; 
      }); 
     }); 

此示例可能更清晰,但它可用於說明目的。希望有所幫助。

+0

我在遷移1.2 - > 1.3後面臨同樣的問題。我的方法看起來和你的完全一樣。我無法理解爲什麼它以這種方式工作,並被迫使用這樣的解決方法:delete $ scope.myObj。$ resolved;刪除$ scope.myObj。$ promise; – vicont