猿问

在 JavaScript 中处理 Firebase 身份验证错误的有效方法

我目前正在 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'

        }

    }

}

有什么办法可以更有效地编写步骤吗?谢谢。


Cats萌萌
浏览 114回答 1
1回答

阿波罗的战车

如果上面的样式让您感到困扰,只需将代码重构为如下所示:const exists = await isUserExists(email);if (exists) {  return { status: false, message: 'already exists' };}// Create and set claimsasync function isUserExists(email) {  try {    await admin.auth().getUserByEmail(email);    return true;  } catch (err) {    return false;  }}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答