在angularjs服务中获取数据时如何进行错误处理

时间:2015-10-05 10:41:43

标签: angularjs service controller

此代码获取类别并将其提供给控制器。

sampleApp.factory('SCService', function($http, $q) {

    var SuperCategories = [];
    var SCService =  {};

    SCService.GetSuperCategories = function() {
        var req = {
            method: 'POST',
            url: SuperCategoryURL,
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            data: "action=GET"
        };
        if ( SuperCategories.length == 0 ) {
            return $http(req).then(function (response) {
                SuperCategories = response.data;
                return SuperCategories;
            });
        }else {
            return $q.when(SuperCategories);
        }
    }

    return SCService;
});

我认为代码是完美的,直到http请求中没有错误。

我的查询是如何进行错误处理(尝试catch或类似的东西),以防服务器出现问题或者cgi-script有问题但无法为请求提供服务。

4 个答案:

答案 0 :(得分:1)

Angular promises使用方法catch

return $http(req).then(function (response) {
    SuperCategories = response.data;
    return SuperCategories;
}).catch(function(error) {
    // Do what you want here
});

您还应该使用finally

return $http(req).then(function (response) {
    SuperCategories = response.data;
    return SuperCategories;
}).catch(function(error) {
    // Do what you want here
}).finally(function() {
    // Always executed. Clean up variables, call a callback, etc...
});

答案 1 :(得分:1)

一样写
 return $http(req).then(function (response) {
               //success callback
            },
 function(){
//Failure callback
});

答案 2 :(得分:0)

使用来自控制器的回调方法Like

Controller.js

service.GetSuperCategories(function (data) {console.log('success'},function (error){console.log('error'});

service.js

sampleApp.factory('SCService', function($http, $q) {

    var SuperCategories = [];
    var SCService =  {};

    SCService.GetSuperCategories = function(successMethod,errorMethod) {
        var req = {
            method: 'POST',
            url: SuperCategoryURL,
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            data: "action=GET"
        };
        return $http(req).then(successMethod(data),
errorMethod(error));
    }

    return SCService;
});

答案 3 :(得分:0)

您可以使用$ http服务的.success和.error方法,如下所示

$http(req).success(function(data, status, headers){
    // success callback:  Enters if status = 200
}).error(function(status, headers){
    // error callback: enters otherwise
});