我正在MEAN堆栈上开发一个应用程序。我建立工厂来处理我的http请求,然后在我的控制器中使用该服务。
服务
.factory('dataSvc', function($q, $http, $timeout, $rootScope, $resource) {
var dataSvc = {};
dataSvc.list = function(options) {
var defer = $q.defer();
return $http.get(options.url).success(function(data) {
console.log('========data========', data)
defer.resolve(data);
}).error(function(err){
console.log('======err=======', err)
defer.reject(err);
});
return defer.promise;
}
return dataSvc;
});
我有两个问题:
即使我从后端获得401状态,我总是最终成功,所以我在这里做错了。
如果我从$ http.get中删除返回,则该功能会中断。那么在$ http.get
控制器
dataSvc.list({url: '/api/users'}).then(function(result) {
console.log('result here===========', result);
if(result.status == 401) {
}
else {
}
});
还有那个方法与angular提供的成功和错误方法有什么区别?
答案 0 :(得分:1)
您可以返回$http.get
个对象,而不是创建自己的promise
,因为$http.get
确实会返回一个promise对象。之后,您需要在.then
上使用$http.get
函数,该.then
函数将具有第一个函数,当promise被解析时将会调用它。当承诺被拒绝时,将调用其他函数。
然后,您在dataSvc.list = function(options) {
var defer = $q.defer();
return $http.get(options.url).then(function(response) {
console.log('========response========', response)
return response;
}).error(function(err){
console.log('======err=======', err)
return err;
});
}
函数中收到的响应对象中包含各种数据。
数据 - {string | Object} - 使用转换函数转换的响应体。 状态 - {number} - 响应的HTTP状态代码。
标题 - {function([headerName])} - 标头获取功能。
config - {Object} - 用于生成请求的配置对象。
statusText - {string} - 响应的HTTP状态文本。
<强>代码强>
dataSvc.list({url: '/api/users'}).then(function(result) {
console.log('result here===========', result);
if(result.status == 401) {
}
else {
}
});
<强>控制器强>
{{1}}