AngularJS工厂返回类型未定义
AngularJS Factory return type undefined
我试图将数据存储在angularjs工厂内的数据库中,这对我来说很有效。在Parse中存储数据后,我试图返回1或错误对象(取决于存储是否有效),然后在控制器中处理。
在控制器中,当我检查返回值时,它既不是1也不是错误,而是未定义的。
这是我的密码。。。
控制器呼叫服务:
$scope.signup = function(user, $state) {
if(user !== null)
{
var returnValue = CreateUserService.createAccount(user);
console.log("Return Value = " + returnValue);
if(returnValue === 1)
{
$state.go('activate');
}else{
console.log("Return Value was not appropriate");
}
}else{
console.log("Something went wrong while adding user");
}
};
工厂:
.factory('CreateUserService', function() {
return {
createAccount: function(user) {
var parseUser = new Parse.User();
parseUser.set("username", user.username);
parseUser.set("email", user.email);
parseUser.set("name", user.name);
parseUser.set("password", user.password);
parseUser.set("mobile", user.mobile);
/*Attempt to create user in DB*/
parseUser.signUp(null, {
success: function(parseUser) {
// Hooray! Let them use the app now.
//alert("success!");
console.log("Stored");
return 1;
},
error: function(parseUser, error) {
// Show the error message somewhere and let the user try again.
//alert("Error: " + error.code + " " + error.message);
console.log("Error: " + error.message );
return error;
}
});
}
}
}
谢谢你帮忙。
实际上并不是从createAccount
函数返回,而是从回调返回。回调也是asynchronous
,因此它将在完成请求之前返回。
.factory('CreateUserService', function($q) {
return {
createAccount: function(user) {
var deferred = $q.defer();
var parseUser = new Parse.User();
parseUser.set("username", user.username);
parseUser.set("email", user.email);
parseUser.set("name", user.name);
parseUser.set("password", user.password);
parseUser.set("mobile", user.mobile);
/*Attempt to create user in DB*/
parseUser.signUp(null, {
success: function(parseUser) {
// Hooray! Let them use the app now.
//alert("success!");
console.log("Stored");
deferred.resolve(1);
},
error: function(parseUser, error) {
// Show the error message somewhere and let the user try again.
//alert("Error: " + error.code + " " + error.message);
console.log("Error: " + error.message );
deferred.reject(error);
}
});
return deferred.promise;
}
}
}
然后在控制器中使用服务功能作为承诺。
CreateUserService.createAccount(user).then(function(result) {
// result should be whatever passed in to resolve
}, function(error) {
// error here will be whatever passed into reject
});
了解有关承诺的更多信息:https://docs.angularjs.org/api/ng/service/$q
我认为问题是因为您的ajax调用异步调用。当您调用"CreateUserService.createAccount(user)"时,它依次调用异步的ajax调用parseUser.signUp。
.factory('CreateUserService', function($q) {
return {
createAccount: function(user) {
var parseUser = new Parse.User();
parseUser.set("username", user.username);
parseUser.set("email", user.email);
parseUser.set("name", user.name);
parseUser.set("password", user.password);
parseUser.set("mobile", user.mobile);
var deferred = $q.defer();
/*Attempt to create user in DB*/
parseUser.signUp(null, {
success: function(parseUser) {
// Hooray! Let them use the app now.
//alert("success!");
console.log("Stored");
// return 1;
deferred.resolve(data);
},
error: function(parseUser, error) {
// Show the error message somewhere and let the user try again.
//alert("Error: " + error.code + " " + error.message);
console.log("Error: " + error.message );
//return error;
return deferred.resolve("Error while saving");
}
});
return deferred.promise;
}
}
}
也可以使用此更改控制器$scope.signup=函数(用户,$state){
if(user !== null)
{
var promise = CreateUserService.createAccount(user);
promise.then(function(data) {
$state.go('activate');
},
function(data) {
console.log("Return Value was not appropriate");
});
}else{
console.log("Something went wrong while adding user");
}
};
这可能会解决
问题是您正在从一步深的回调返回,因此您需要某种回调或angularJS的$q服务
类似的问题:如何从异步回调函数返回值?
$scope.signup = function(user, $state) {
if(user !== null)
{
// notice the callback function passed below
CreateUserService.createAccount(user, function(returnValue){
// returnValue in available here for use
console.log("Return Value = " + returnValue);
if(returnValue === 1)
{
$state.go('activate');
}else{
console.log("Return Value was not appropriate");
}
});
}else{
console.log("Something went wrong while adding user");
}
};
工厂:
.factory('CreateUserService', function() {
return {
createAccount: function(user, done) {
// done callback function in the param to be called for returning the values
var parseUser = new Parse.User();
parseUser.set("username", user.username);
parseUser.set("email", user.email);
parseUser.set("name", user.name);
parseUser.set("password", user.password);
parseUser.set("mobile", user.mobile);
/*Attempt to create user in DB*/
parseUser.signUp(null, {
success: function(parseUser) {
// Hooray! Let them use the app now.
//alert("success!");
console.log("Stored");
// call the done/callback here for success
done(1);
},
error: function(parseUser, error) {
// Show the error message somewhere and let the user try again.
//alert("Error: " + error.code + " " + error.message);
console.log("Error: " + error.message );
// call the done/callback here for error
done(error);
}
});
}
}
}
相关文章:
- "日期“;AJAX请求返回的类型值未定义
- 函数jquery的未定义返回
- Typeahead的Javascript类型返回未定义
- 对象在发送到函数时给出未定义的类型
- src 的参数在 javascript 中返回未定义的类型.如何解决
- winJS 从函数未定义返回 var
- $.get jquery 中的未定义返回
- 未定义的类型在 JS 中的行为不同
- 在 ajax 调用上返回未定义的数据类型
- 类型对未定义的类型不起作用
- Javascript 函数未定义返回
- 数据 ID 一直未定义返回
- 函数调用Javascritpt的未定义返回值
- javascript中未定义的类型
- 未定义的类型,当我把我的代码对象Javascript AJAX
- 在函数中提示未定义返回.(问题)范围
- javascript中未定义的类型错误
- AJAX JSON请求显示为未定义的类型
- JSON字符串的未定义返回
- 级联对象声明从第二个对象开始提供未定义的类型