【发布时间】:2014-04-08 20:17:20
【问题描述】:
我想编写两个服务,一个使用$http.get 方法,一个使用$resource
这个服务应该接收一个 Json 对象,看起来像这样,目前这段代码直接在我的控制器中,而不是在服务中:
var csvPromise= $http.get(base_url + 'DataSource/1').success(function(data) {
$scope.data4=JSON.stringify(data);
});
问题是,我想将接收到的数据保存在$scope.data4 中,并且我想在$http.get 调用之后使用这些数据,但该值为空。
在这个调用之后直接有需要这个值的对象:
new myObject($scope.data4)
所以myObject 必须等待很长时间,直到数据到达。
或者我可以使用$http 或$resource 进行同步调用吗?
我该怎么做?我找到了很多 promise 和 .then 的例子,但对我没有任何帮助。
编辑:我现在写了一个服务,但它没有工作:
var test=angular.module('myApp.getCSV', ['ngResource']);
test.factory('getCSV',function($log, $http,$q, $resource){
return {
getData: function (id) {
var csvPromise= $http.get(base_url +'DataSource/'+id)
.success(function(data) {
return data;
});
return csvPromise;
}
}
});
然后在我的控制器中我称之为:
getCSV.getData(1).then(function(theData){
$scope.data4=JSON.stringify(theData);
new myObject( $scope.data4); });
但这不起作用。我想如果$http.get 接收到数据,那么then 函数就会被调用。
【问题讨论】:
-
success和error方法是$http特定的,不构成承诺链的一部分。将您的服务getData()函数体更改为:return $http.get(base_url +'DataSource/'+id);这将返回承诺,一旦解决,将在控制器内调用您的then函数。另请参阅下面我的答案以获取替代选项。
标签: json angularjs http rest asynchronous