在AngularJS服务中使用$http回调
Using $http callback inside AngularJS service
我有一个简单的Angular服务,它使用$http来调用API。
app.service("MyService", function($http){
this.api = function(obj){
return $http.post("/some-route", obj).success(function(data){
//process data in various ways here
var returnObj = {
complete: true,
data: data
};
return returnObj;
});
}
});
在$http回调中,我在返回数据之前先处理数据。当我在控制器中调用此服务时,我想获得处理后的数据。
下面只给我未处理的数据:
MyService.api(someObj).success(function(data){
console.log(data);
});
如何从回调中获取已处理的数据?
success
函数不会创建新的promise,因此您的控制器成功回调将注册到与服务(原始promise)相同的promise。
相反,您可以使用then
,因此它将创建一个新的promise,该promise将通过您的returnObj
对象来解决:
// service
return $http.post("/some-route", obj).then(function(data){
// controller
myService.api().then(function(data) {
我已经在一个plunker中测试了你的代码,你猜怎么着?它对我有用。你能确认一下吗,或者给我发更多信息,如果我能帮忙,我很高兴。
Plunker
var app = angular.module('plunker', []);
app.service("MyService", function($http){
this.api = function(obj){
return $http.post("http://jsonplaceholder.typicode.com/posts", obj).success(function(data){
//process data in various ways here
console.log(data);
var returnObj = {
complete: true,
data: data
};
return returnObj;
});
}
});
app.controller('MainCtrl', function($scope,MyService) {
$scope.data = 'World';
MyService.api({oi: true}).success(function(data){
$scope.data = data
});
});
更新:我误解了你的问题。您希望处理回调中的数据,以便在操作中对其进行操作。您的代码不起作用,因为success()实际上返回了一个promise,但它不会更改它,而是返回原始的promise。要选择的是then(),它是可链接的,并返回promise的修改版本。我对plunker进行了更改,以反映我对场景的新看法。这是新代码。谢谢你抽出时间。
var app = angular.module('plunker', []);
app.service("MyService", function($http){
this.api = function(obj){
return $http.post("http://jsonplaceholder.typicode.com/posts", obj).then(function(data){
//process data in various ways here
console.log(data);
var returnObj = {
complete: true,
data: data
};
return returnObj;
});
}
});
app.controller('MainCtrl', function($scope,MyService) {
$scope.data = 'World';
MyService.api({oi: true}).then(function(data){
$scope.data = data
});
});
新Plunker
相关文章:
- 在AngularJS服务中使用$http回调
- http/rxjs catch回调中的Angular 2重定向导致TypeError:无法读取属性'订阅'
- $http服务未触发成功或错误回调
- $http.delete回调未在基本CRUD应用程序中启动
- 承诺中的成功回调不会发生$http
- 如何在Angular中设置异步HTTP服务的回调,以便在不定义数组的情况下在控制器中填充数组
- Angularjs $http.get 不调用回调
- 在 HTTP 错误回调中访问“this”
- Meteor.js HTTP.get 获取 JSON 引号并解析结果似乎包含一个回调函数
- http.jsonp 和 JavaScript 中的回调
- 在 AngularJS 和 Typescript 的回调中使用$http this
- AngularJS$http.获取当时和成功回调之间的区别
- $http错误回调不能与 httpProvider responseInterceptor 结合使用
- Angular JS从服务和Http回调方法返回数据
- Angular-For Loop HTTP回调/承诺
- 如何在没有脚本标记但在js文件中的javascript中执行http回调请求
- 传递额外的参数到NodeJs的Http回调方法
- 将此变量传递给angular$http回调
- 在Node JS中如何传递一个变量到http.回调的要求
- 如何从angularjs的http回调中查看json数据