gpt4 book ai didi

javascript - AngularJS 工厂返回类型未定义

转载 作者:行者123 更新时间:2023-11-28 18:54:33 25 4
gpt4 key购买 nike

我正在尝试将数据存储在 angularjs 工厂的数据库中,这对我有用。在 Parse 中存储数据后,我尝试返回 1 或错误对象(取决于存储是否工作),然后在 Controller 中处理它。

在 Controller 中,当我检查返回值时,它既不是 1 也不是错误,而是未定义。

这是我的代码...

Controller 调用服务:

$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 函数返回,而是从回调中返回。此外,回调是异步的,因此它将在完成请求之前返回。

.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;
}
}
}

然后在您的 Controller 中使用服务函数作为 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
});

了解有关 promise 的更多信息: https://docs.angularjs.org/api/ng/service/ $q

关于javascript - AngularJS 工厂返回类型未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33886381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com