我目前正在 JavaScript 中使用 Firebase 身份验证,并尝试创建一个函数来注册用户。我需要检查的第一步是电子邮件的可用性。无论使用还是不使用getUserByEmail()功能。如果该电子邮件未被使用,则继续注册步骤,否则,返回一个包含错误状态和错误消息的对象。问题是,getUserByEmail()函数返回一个 Promise。因此,如果提供的电子邮件尚未注册,该函数将返回错误。这是可以理解的,因为该函数是基于 Promise 的。但令我困扰的是语法顺序,因为它是“相反的”,因为从我通常所做的来看,该try块是执行“正确的步骤”,而该catch块是执行“错误的步骤”。这是我写的代码:try { const findFirebaseUser = await admin.auth().getUserByEmail(email); return { status: false, message: 'Email has been used' }} catch (error) { if (error.errorInfo.code === 'auth/user-not-found') { // register step const { uid } = await admin.auth().createUser({ displayName: name, password, email, phoneNumber }); await admin.auth().setCustomUserClaims(uid, { role }); return { status: true, message: 'Success' } }}有什么办法可以更有效地编写步骤吗?谢谢。
1 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
如果上面的样式让您感到困扰,只需将代码重构为如下所示:
const exists = await isUserExists(email);
if (exists) {
return { status: false, message: 'already exists' };
}
// Create and set claims
async function isUserExists(email) {
try {
await admin.auth().getUserByEmail(email);
return true;
} catch (err) {
return false;
}
}
添加回答
举报
0/150
提交
取消