使用工厂服务进行http调用并通过控制器使用它们

时间:2015-11-06 11:10:34

标签: angularjs

我正在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;
});

我有两个问题:

  1. 即使我从后端获得401状态,我总是最终成功,所以我在这里做错了。

  2. 如果我从$ http.get中删除返回,则该功能会中断。那么在$ http.get

  3. 前需要这个return关键字

    控制器

    dataSvc.list({url: '/api/users'}).then(function(result) {
        console.log('result here===========', result);
        if(result.status == 401) {
    
        }
        else {
    
        }
    
    });
    

    还有那个方法与angular提供的成功和错误方法有什么区别?

1 个答案:

答案 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}}