javascript - Firebase - 未捕获( promise )TypeError : Cannot read property

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

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

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

它说:

Uncaught (in promise) TypeError: Cannot read property 'email' of null

如果用户名匹配,上面的 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
}

最佳答案

try {
   snapshot.val().email
} catch(e) {
    if (e instanceof TypeError) {
    ....
    }
}

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

但看起来你也可以通过空检查逃脱(这通常比触发可避免的异常更适合“流量控制”)

var user = snapshot.val();
if (user == null) { /* error */}

关于javascript - Firebase - 未捕获( promise )TypeError : Cannot read property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38639837/

相关文章:

javascript - 如何在 JavaScript 严格模式下使用 fetch() API?

javascript - Firebase Web 读取请求在 Google 抓取期间被阻止 - 网站站长工具

swift - 无法从 Firebase 加载我当前用户的帖子 - Swift

javascript - 使用cheerio从ul中提取2个元素

javascript - 是否可以缓存整个网站,包括开始 html 页面和在没有互联网连接的情况下启动?

javascript - 如何在脚本第一次运行时在 Javascript 中打印一组名称,然后在第二次运行时出现提示?

javascript - Firebase 响应取决于 Firestore 查询不起作用

Firebase 只允许云函数访问读写

java - 如果文档使用大型 Map 字段,则 Firebase Firestore 查询错误

android - 如何在适用于 Android 的新 FirebaseDatabase API 中设置 FirebaseDatabase 的缓存大小?