2015-05-26 85 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" 
相關問題