javascript服务没有返回承诺

时间:2016-02-05 04:09:16

标签: angularjs

我正在开发一个AngularJS应用程序。我有loginService.js文件,它定义了登录服务,如下所示:

(function () {

    var loginService = function ($http) {
        var login = function (userName, loginPassword) {

            var data = "grant_type=password&username=" + userName + "&password=" + loginPassword;

           $http.post("/Token", data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
                 .then(function (response) {
                     return response.data;
                 });


        };

        return {
            login: login
        };
    };

    var module = angular.module("MyApp");
    module.factory("loginService", loginService);
}());

和javascript中的LoginController定义如下:

(function () {
    var app = angular.module("kanbanBoard");

    var LoginController = function ($scope, $location, loginService, localStorageService) {

        var loginData = {
            userName: "",
            loginPassword: ""
        };

        $scope.loginData = loginData;

        var onLoginComplete = function (data) {
            alert(data);
            localStorageService.set('authorizationData', { token: response.access_token, userName: userName });

            //$location.url("/");
        };

        var onError = function (result) {
            alert(result);
            $scope.error = result;
        }

        $scope.login = function () {

            loginService.login($scope.loginData.userName, $scope.loginData.loginPassword)
                          .then(onLoginComplete, onerror);
        }

    };

    app.controller("LoginController", LoginController);
}());

无法获得财产'然后'在LoginController.js文件中的未定义或空引用。到目前为止,我理解的loginService类应该返回在LoginController中处理的promise。我不确定我在这做什么错。

2 个答案:

答案 0 :(得分:1)

您需要在登录函数中返回$ http.post中的承诺:

      return $http.post("/Token", data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
             .then(function (response) {
                 return response.data;
             });

否则返回void,因此(null).then()会导致你提到的错误。

答案 1 :(得分:1)

您在$http.post的调用中未返回accountManager.login(...)的值,因此它将返回undefined,这肯定不是当时的能力。