繁体   English   中英

AngularJS服务未返回承诺

[英]AngularJS service not returning a promise

我最近开始使用AngularJS,尽管可以看到一些改进,但我无法兑现承诺。 我创建了一个使用Parse框架允许用户进行注册的登录服务,以及一个将数据从表单发送到服务的注册控制器。 由于注册需要花费几秒钟,因此我决定使用诺言,将当前用户注册后将其返回到登录控制器。 不幸的是,我一直收到此错误:无法读取未定义的属性“ then”。 有人能指出我正确的方向吗?

控制器:

(function () {
'use strict';

angular
    .module('app.register')
    .controller('RegisterController', RegisterController);

RegisterController.$inject = ['$q', 'logger', 'loginservice'];
/* @ngInject */
function RegisterController($q, logger, loginservice) {
    var vm = this;
    vm.title = 'Register'; 
    vm.register = register;     
    vm.user = {
        username: "",
        password: "",
        email: ""
    };

    activate();

    function activate() {
        logger.info('Activated Register View');
    }

    function register() {
        var promise = loginservice.register(vm.user.username, vm.user.email, vm.user.password);

        promise.then(function(userData) {
            console.log("User: ", userData);
        });
    }
}
})();

服务:

(function() {
'use strict';

angular
    .module('app.core')
    .factory('loginservice', loginservice);

loginservice.$inject = ['$http', '$q', 'logger'];
/* @ngInject */
function loginservice($http, $q, logger) {
    var service = {
        // logIn: logIn,
        // logOut: logOut,
        register: register
    };

    return service;

    function initialize() {
        console.log("parse initialized");
    }

    function register(username, email, password) {
        //alert("HELLO FROM " + username + " " + password + " " + email);

        Parse.initialize(appId, parseId);
        var user = new Parse.User();
        user.set("username", username);
        user.set("password", password);
        user.set("email", email);

        $http.get(user.signUp(null, {
         success: function(user) {
            return user;
          },
          error: function(user, error) {
            return error.message;
            // Show the error message somewhere and let the user try again.
            alert("Error: " + error.code + " " + error.message);
          }
        })).then(function() {
            return user;
        });
    }
}
})();

您只需要return $http调用:

function register(username, email, password) {
        //alert("HELLO FROM " + username + " " + password + " " + email);

        Parse.initialize(appId, parseId);
        var user = new Parse.User();
        user.set("username", username);
        user.set("password", password);
        user.set("email", email);

        return $http.get(user.signUp(null, {
         success: function(user) {
            return user;
          },
          error: function(user, error) {
            return error.message;
            // Show the error message somewhere and let the user try again.
            alert("Error: " + error.code + " " + error.message);
          }
        })).then(function() {
            return user;
        });
    }

如果不返回在$http调用期间创建的promise,则一个函数(默认情况下)将返回undefined

像这样返回$http调用

function register(username, email, password) {
    ...
    return $http.get(user.signUp(null, {
     success: function(user) {
        return user;
      },
      error: function(user, error) {
        return error.message;
        // Show the error message somewhere and let the user try again.
        alert("Error: " + error.code + " " + error.message);
      }
    })).then(function() {
        return user;
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM