[英]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.