Javascript Firebase函数承诺未定义类型错误
我目前正在使用firebase函数从数据库调用以下文档:Javascript Firebase函数承诺未定义类型错误,javascript,node.js,firebase,firebase-realtime-database,Javascript,Node.js,Firebase,Firebase Realtime Database,我目前正在使用firebase函数从数据库调用以下文档: let token, userId; db.doc(`/users/${newAccount.username}`) .get() .then((doc) => { if (doc.exists === false) { return firebase.auth().createUserWithEmailAndPassword(newAccount.email, newAcco
let token, userId;
db.doc(`/users/${newAccount.username}`)
.get()
.then((doc) => {
if (doc.exists === false) {
return firebase.auth().createUserWithEmailAndPassword(newAccount.email, newAccount.password).catch(err => console.error(err));
} else {
res.status(400).json({ username: 'this username is already taken' });
}
})
.then(data => {
userId = data.user.uid;
return data.user.getIdToken();
})
.then((idToken) => {
token = idToken;
const userCredentials = {
username: newAccount.username,
email: newAccount.email,
created: new Date().toISOString(),
userId
};
return db.doc(`/users/${newAccount.username}`).set(userCredentials);
})
.then(() => {
return res.status(201).json({ token });
})
.catch((err) => {
console.error(err);
if (err.code === 'auth/email-already-in-use') {
return res.status(400).json({ email: 'Email is already is use' });
} else {
return res.status(500).json({ general: 'Something went wrong, please try again' });
}
});
TypeError: Cannot read property 'user' of undefined
代码运行正常,但如果数据库中存在文档,则会记录错误:
let token, userId;
db.doc(`/users/${newAccount.username}`)
.get()
.then((doc) => {
if (doc.exists === false) {
return firebase.auth().createUserWithEmailAndPassword(newAccount.email, newAccount.password).catch(err => console.error(err));
} else {
res.status(400).json({ username: 'this username is already taken' });
}
})
.then(data => {
userId = data.user.uid;
return data.user.getIdToken();
})
.then((idToken) => {
token = idToken;
const userCredentials = {
username: newAccount.username,
email: newAccount.email,
created: new Date().toISOString(),
userId
};
return db.doc(`/users/${newAccount.username}`).set(userCredentials);
})
.then(() => {
return res.status(201).json({ token });
})
.catch((err) => {
console.error(err);
if (err.code === 'auth/email-already-in-use') {
return res.status(400).json({ email: 'Email is already is use' });
} else {
return res.status(500).json({ general: 'Something went wrong, please try again' });
}
});
TypeError: Cannot read property 'user' of undefined
我想这个承诺还在履行,我有点纠结于如何结束它
任何帮助都将不胜感激。谢谢。您的第二个
回调将在所有情况下被调用。在第一次回调中发送400响应实际上不会阻止承诺传播到以下所有然后回调
如果要停止然后执行
回调链,则应该抛出一个错误,由链下的catch
捕获,跳过所有然后