gpt4 book ai didi

javascript - Firebase 函数 promise 未定义的类型错误

转载 作者:行者123 更新时间:2023-12-02 21:18:02 24 4
gpt4 key购买 nike

我目前正在使用 firebase 函数从数据库调用以下文档:

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

我认为 promise 仍在运行,但我有点不知道如何结束它?

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

您的第二个 then 回调将在所有情况下被调用。在第一个回调中发送 400 响应实际上并不会阻止 Promise 传播到以下所有 then 回调。

如果您想停止执行 then 回调链,您应该抛出一个错误,让链中的 catch 捕获该错误,从而跳过所有然后

关于javascript - Firebase 函数 promise 未定义的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60917602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com