Я хочу вызывать конечную точку службы (db.checkEmail), только если значение электронной почты является строкой в формате электронной почты.
const yupSchema = Yup.object().shape({
email: Yup.string()
.email()
.required('Required')
.test('alreadyUsed', 'Not Available', async (value) => {
const result = await Yup.string()
.email()
.required('Required')
.validate(value)
.then((email) => db.checkEmail({email}));
return result.data.count === 0;
})
,
password: Yup.string()
.required('Required')
})
Кажется, что проверка строки дважды является излишней ... но если яоставьте валидацию, тогда все три валидации запустятся.
Я использую документацию, найденную здесь: Yup github README.md
в разделе mixed.test говорится:
Чтобы разрешить асинхронную пользовательскую проверку, все (или нет) тесты выполняются асинхронно. Следствием этого является то, что порядок выполнения теста не может быть гарантирован.
Поэтому я пытаюсь гарантировать, что я не буду делать дорогие вызовы API, если мне действительно не нужно ...