2015-05-26 88 views
3

有人可以帮助我解决这个问题。 事实上,我正在尝试注册一个新用户,并在创建新用户之前,我必须检查用户名是否存在。下面是用于此的工厂。TypeError:成功不是函数

.factory('accountService', function($resource, sessionService) { 
    var service = {}; 
    service.register = function(account, success, failure) { 
     if (success (service.userExists(account))){ 
      failure(); 
     } else { 
      var Account = $resource("/Test/rest/account/student"); 
      Account.save({}, account, success, failure); 
     }    
    }; 

    service.userExists = function(account, success, failure) { 
     var Account = $resource("/Test/rest/account"); 
     var data = Account.get({ 
       username : account.username, 
       password : account.password 
      }, function() { 
       var accounts = data.username; 
       if (accounts && accounts.length !== 0) { 
        service.data = data; 
        success(account); 
       } else { 
        failure(); 
       } 
      }, failure); 
    }; 

    service.getuser = function() { 
     return service.data; 
    }; 

    return service; 
}) 

但是当我运行它,我得到这个错误信息:

TypeError: success is not a function

下面

是使用这个工厂控制器

.controller(
      "RegisterController", 
      function($scope, sessionService, $state, accountService) { 
       $scope.register = function() { 
        accountService.register($scope.account, function(
          returnedata) { 
         sessionService.login($scope.account).then(
           function() { 
            $state.go("home"); 
           }); 
        }, function() { 
         $scope.registererror = function() { 
         } 
        }); 
       }; 
      }) 
+0

您需要提供一些更多信息,以便我们可以帮助您。最好的方法是创建一些小提琴或Plunker来隔离问题。 –

+0

你如何运行你的代码?我们看到工厂并想知道在调用service.userExists(account)时产生错误 –

+3

是什么,您没有传递成功和失败回调,这是userExists函数的定义中预期的。这就是为什么你没有定义错误“成功”。你有没有在其他一些代码中定义这些,你在这里没有提到? –

回答

0
.factory(
      'accountService', 
      function($resource, sessionService) { 
       var service = {}; 
       service.register = function(account, success, failure) { 
        service 
          .validUserName(
            account, 
            function(answer) { 
             if (answer) { 
              console.log(answer); 
              failure(); 
             } else { 
              var Account = $resource("/Test/rest/account/student"); 
              Account.save({}, account, 
                success, failure); 
             } 
            }, failure); 
       }; 
       service.userExists = function(account, success, failure) { 
        var Account = $resource("/Test/rest/account"); 
        var data = Account.get({ 
         username : account.username, 
         password : account.password 
        }, function() { 
         console.log("user details : ", data); 
         var accounts = data.username; 
         if (accounts && accounts.length !== 0) { 
          service.data = data; 
          success(account); 
         } else { 
          failure(); 
         } 
        }, failure); 
       }; 
       service.validUserName = function(account, success, failure) { 
        var Account = $resource("/Test/rest/account/user"); 
        var data = Account.get({ 
         username : account.username 
        }, function() { 
         var accounts = data.username; 
         if (accounts && accounts.length !== 0) { 
          service.data = data; 
          success(true); 
         } else { 
          success(false); 
         } 
        }, failure); 
       }; 
       service.getuser = function() { 
        return service.data; 
       }; 
       return service; 
      }) 

和控制器:

.controller(
      "RegisterController", 
      function($scope, sessionService, $state, accountService) { 
       $scope.register = function() { 
        accountService.register($scope.account, function(
          returnedata) { 
         accountService.userExists($scope.account, function(
           account) { 
          sessionService.login($scope.account).then(
            function() { 
             $state.go("get_started"); 
            }); 
         }); 

        }, function() { 
         $scope.registererror = function() { 
         } 
        }); 
       }; 
      }); 
3

我怀疑的错误是在这一行

service.userExists(account)

您的方法s ignature是

service.userExists = function(account, success, failure)

,那么你把它称为“成功”将在这种情况下和 “service.userExists”

success(account)

抛出一个错误

这里被改写内这条线是不确定的大约如何避免这个错误的例子,关于变化的提示。我们需要区分失败和用户存在,为了举例,我刚刚将“成功”中的returnData更改为true/false。

.factory('accountService', function($resource, sessionService) { 
var service = {}; 
service.register = function(account, success, failure) { 
    service.userExists(account), function(answer){ 
     if (answer){ 
      success(); 
     } else { 
      var Account = $resource("/Test/rest/account/student"); 
      Account.save({}, account, success, failure); 
     } 
    }, failure);   
}; 

service.userExists = function(account, success, failure) { 
    var Account = $resource("/Test/rest/account"); 
    var data = Account.get({ 
      username : account.username, 
      password : account.password 
     }, function() { 
      var accounts = data.username; 
      if (accounts && accounts.length !== 0) { 
       service.data = data; 
       success(true); 
      } else { 
       success(false); 
      } 
     }, failure); 
}; 

service.getuser = function() { 
    return service.data; 
}; 

return service; 

})

+0

是的,这就是问题所在,但是我怎样才能修复它 –

+0

@MohamedNAOUALI,我在我的回复中添加了对'accountService'的更改。编辑注册和userExists方法。 – koyaanisqatsi

0
service.userExists = function(account, success, failure) 

...

if (success (service.userExists(account))) 

调用仅具有一个PARAM 3方法PARAM。

+0

问题不在传递给方法的参数中,而是如何设置成功和失败回调。 –

0
if (success (service.userExists(account))) 

这里脚本想调用函数success(param)。所以你必须定义success()方法,或者你需要通过其他方式来检查它。它应该看起来像

if(service.userExists(account)){ 
    failure(); //also needs to be defined! 
} else{ 
    var Account = $resource("/Test/rest/account/student"); 
    Account.save({}, account, success, failure); 
} 

你真的需要你在呼唤什么样的护理 - >

var test = "hello"; 
console.log(test); //-> prints "hello" 

var test = function(){ 
    console.log("hello") 
} 
console.log(test); //-> prints sth. like "function()....." 
console.log(test()); //-> prints "hello" 
相关问题