Yup的自定义验证的错误消息不会消失

时间:2020-01-18 04:21:25

标签: javascript reactjs react-native formik yup

在注册过程中,我想使用Yup中的自定义验证来检查是否有重复的电子邮件:

validationSchema={yup.object().shape({
    email: yup
        .string()
        .email()
        .test({
            name: 'duplicate-email-check',
            params: 'value',
            message: 'Duplicate email already exists',
            test: async (value) => {
                firebase
                    .auth()
                    .fetchSignInMethodsForEmail(value)
                    .then(result => {
                        if (result === "password") {
                            return false
                        } else {
                            return true
                        }
                    })
                    .catch(err => console.log(err))
            }
        })
        .required(),
})}

我正在使用fetchSignInMethodsForEmail来获取具有相同电子邮件的任何类型的帐户,如果存在,则会抛出验证错误消息。我在mixed().text()模式之后进行建模,但是问题是,即使没有重复的电子邮件,错误消息“重复的电子邮件已经存在”也不会消失。

1 个答案:

答案 0 :(得分:1)

这部分代码不会返回Promise,而Promise会返回ctr.Write的布尔值

test

您可以将代码更改为:

test: async (value) => { // Notice this, adding curly braces will require you to put a return statement
                firebase
                    .auth()
                    .fetchSignInMethodsForEmail(value)
                    .then(result => {
                        if (result === "password") {
                            return false
                        } else {
                            return true
                        }
                    })
                    .catch(err => console.log(err))
            }