2014-03-13 628 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