Angularjs 我做错了

Angularjs 我做错了,angularjs,Angularjs,我正试图为我的网站写一个工厂 所以我写了这个: mod.factory('AccountService', function($http) { var service = {}; var onError = function(response) { if (response == '') { return ['Timeout Occured !']; } var errors = []; for (var key in response.Mode

我正试图为我的网站写一个工厂

所以我写了这个:

mod.factory('AccountService', function($http) {
var service = {};

var onError = function(response) {
    if (response == '') {
        return ['Timeout Occured !'];
    }
    var errors = [];
    for (var key in response.ModelState) {
        for (var i = 0; i < response.ModelState[key].length; i++) {
            errors.push(response.ModelState[key][i]);
        }
    }

    return errors;
};

var onSuccess = function(response) {
    return true;
}

service.Login = function(credentials) {
    $http.put('http://localhost:9239/Api/Account/', credentials).success(function(data) {
        return onSuccess(response);
    }).error(function (response) {
        return onError(response);
    });
};

return service;
当我登录时,会调用Login方法。但是,$http中的Success或Error方法被调用,它不返回onSuccess或onError函数


我想我犯了一些错误,是吗?

有几件事,
$http
承诺没有
成功
错误
回调,而是
成功
错误
。在您的服务中,您没有返回
$http
承诺,然后您对其调用
success
error
,当然它不会工作
$http
调用,很像任何地方的Ajax调用都是异步进行的,这意味着您不能简单地在成功/错误回调中返回一个值,但是您可以返回一个承诺:

service.Login = function(credentials) {
    return $http.put('http://localhost:9239/Api/Account/', credentials)
};
在您的控制器中,您可以像这样使用:

AccountService.Login($scope.credentials).then(function(data) {//success callback
   $window.sessionStorage.setItem('loginToken', data.SuccessMessages[0]);
    if (data.SuccessMessages[1] != '') {
       $window.sessionStorage.setItem('groupId', data.SuccessMessages[1]);
    }
    $scope.isLoading = false;
    $location.path('/Home');
},function(errors) {//error callback
    $scope.Errors.push(errors);
    $scope.isLoading = false;
})
当您调用承诺时,它将在承诺解析时执行,第一个函数是成功回调,第二个函数是错误回调

AccountService.Login($scope.credentials).then(function(data) {//success callback
   $window.sessionStorage.setItem('loginToken', data.SuccessMessages[0]);
    if (data.SuccessMessages[1] != '') {
       $window.sessionStorage.setItem('groupId', data.SuccessMessages[1]);
    }
    $scope.isLoading = false;
    $location.path('/Home');
},function(errors) {//error callback
    $scope.Errors.push(errors);
    $scope.isLoading = false;
})