[英]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 = function(user,$ 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);
}
});
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.