我有 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/