Firebase - 未捕获(承诺)TypeError:无法读取属性

时间:2016-07-28 14:50:09

标签: javascript firebase firebase-realtime-database firebase-authentication

我有两个文本框,一个用于用户名,另一个用于密码。

<input type="text" id="username">
<input type="text" id="password">
<input type="button" value="Login" onclick="authenticateUser()">

以下是firebase代码:

function authenticateUser() {
  var username = document.getElementById('username').value;
  var password = document.getElementById('password').value;

  database.ref('users/'+username).once('value').then(function(snapshot) {
    var email = snapshot.val().email;
    console.log(email);
  });
}

它说:

  

未捕获(承诺)TypeError:无法读取null

的属性'email'

如果用户名匹配,上面的firebase代码可以工作并获取电子邮件,但如果用户名不存在,如果没有,那么它会抛出TypeError,如何捕获该错误?

遗憾的是,这不起作用:

function authenticateUser() {
  var username = document.getElementById('username').value;
  var password = document.getElementById('password').value;

  database.ref('users/'+username).once('value').then(function(snapshot) {
    var email = snapshot.val().email;
    console.log(email);
  }, function(error) {
    console.log('Invalid Username');
  });
}

如果是电子邮件和密码验证,则有catch

firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // ...
});

在Java中,有类似

的东西
catch(TypeError error) {
    //Do whatever you want to do
}

1 个答案:

答案 0 :(得分:2)

if($resData["result"] == "success")

更多https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

但似乎你也可以通过空检查(这通常比#34;流量控制&#34;更好,而不是触发可避免的例外)离开

true == "success"