2015-11-10 4 views
2

Я пытаюсь использовать либо имя пользователя, либо имя пользователя класса пользователя для входа. Однако, когда я запрашиваю письмо и пытаюсь сделатьUncaught TypeError: Не удается прочитать свойство «получить» неопределенной ошибки

object.get("username") 

Я получаю сообщение об ошибке выше. Как ни странно, когда я испытываю вспомогательную функцию GetUserName в отладчике он работает отлично

function getUsername(email) { 
    var query = new Parse.Query(Parse.User); 
    query.equalTo('email', email); 
    query.first({ 
    success: function(object) { 
     console.log(object.get("username")); 
     return object.get("username"); 
    }, 
    error: function(user, error) { 
     console.log("no email"); 
    } 
    }); 
} 


function signIn(usernameOrEmail, password) { 

    //if not email sign in with username 
    if (usernameOrEmail.indexOf("@") == -1) { 
    Parse.User.logIn(usernameOrEmail, password, { 
     success: function(user) { 
     console.log("Logged in!"); 
     }, 
     error: function(user, error) { 
     alert("Error: " + error.code + " " + error.message); 
     } 
    }); 
    } 
    //query for username from email and signin 
    else { 
    var username = getUsername(usernameOrEmail); 
    Parse.User.logIn(username, password, { 
     success: function(user) { 
     console.log("Logged in!"); 
     }, 
     error: function(user, error) { 
     alert("Error: " + error.code + " " + error.message); 
     } 
    }); 
    } 
} 
+0

'getUsername' ничего не возвращает. Оператор 'return' находится в асинхронной функции обратного вызова. – Barmar

+0

если я ничего не верну, как установить userername = getUsername (email)? – Aaron

+0

Вам нужно передать функцию обратного вызова 'getUsername', и она должна вызвать ее в функции успеха. – Barmar

ответ

1

query.first асинхронная функция. Чтобы использовать возвращаемые значения, вы должны сделать это в функции обратного вызова success:. Поэтому передайте callbak на getUsername, который выполняет вход в систему.

function getUsername(email, callback) { 
    var query = new Parse.Query(Parse.User); 
    query.equalTo('email', email); 
    query.first({ 
    success: function(object) { 
     if (object) { 
     console.log(object.get("username")); 
     callback(object.get("username")); 
     } else { 
     console.log("email not found"); 
     } 
    }, 
    error: function(user, error) { 
     console.log("no email"); 
    } 
    }); 
} 

function signIn(usernameOrEmail, password) { 

    //if not email sign in with username 
    if (usernameOrEmail.indexOf("@") == -1) { 
    Parse.User.logIn(usernameOrEmail, password, { 
     success: function(user) { 
     console.log("Logged in!"); 
     }, 
     error: function(user, error) { 
     alert("Error: " + error.code + " " + error.message); 
     } 
    }); 
    } 
    //query for username from email and signin 
    else { 
    getUsername(usernameOrEmail, function(username) { 
     signIn(username, password); 
    }); 
    } 
} 
+0

К сожалению, я все еще получаю сообщение об ошибке, когда я заменяю свой код моим, говоря, что signIn не определен. Спасибо за все, до сих пор любая дополнительная помощь была бы очень признательна! – Aaron

+0

Проверьте наличие опечаток, потому что я не понимаю, почему это произойдет. Объем имени функции включает в себя ее тело функции. – Barmar

+0

У вас есть общедоступный URL-адрес, который я мог бы попробовать? – Barmar

Смежные вопросы