如何用Yup校验数据库中邮箱是否存在及传递Axios返回结果
Yup异步校验邮箱存在性的修正方案
你的问题核心是Yup的test方法需要返回一个布尔值来判定校验是否通过,当前代码仅发起了请求但未返回结果,所以Yup无法识别校验状态。直接修改test的异步回调逻辑即可解决:
修改后的代码
email: yup .string() .email('请输入正确格式的邮箱') .required('邮箱不能为空') .test( 'email-check', // 校验规则的唯一标识(建议用短横线命名) '该邮箱已被注册', // 校验失败时的提示文本 async (value) => { try { // 用await替代then,逻辑更清晰 const response = await AuthServices.checkEmailExist(value); // 接口返回true = 邮箱已存在 → 校验不通过,返回false // 接口返回false = 邮箱不存在 → 校验通过,返回true return !response.data; } catch (error) { // 处理请求异常(比如网络错误),这里默认返回false触发校验失败,也可按需调整 console.error('邮箱校验请求失败:', error); return false; } } )
关键说明
- 返回值逻辑对应:
接口返回true(邮箱已存在)时,我们需要让Yup判定校验失败,所以返回!response.data(即false)来触发错误提示;接口返回false(邮箱不存在)时,返回true表示校验通过。 - 避免混用await和then:
异步函数里用await处理Promise比嵌套then更易读,也方便统一捕获异常。 - 异常处理:
加上try/catch捕获请求失败的情况,避免因网络问题导致校验卡住,这里默认返回false触发错误,你也可以根据需求改成返回true或者自定义异常提示。
内容的提问来源于stack exchange,提问作者asdasdas
相关产品推荐
相关产品推荐

