You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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;
      }
    }
  )

关键说明

  1. 返回值逻辑对应:
    接口返回true(邮箱已存在)时,我们需要让Yup判定校验失败,所以返回!response.data(即false)来触发错误提示;接口返回false(邮箱不存在)时,返回true表示校验通过。
  2. 避免混用await和then:
    异步函数里用await处理Promise比嵌套then更易读,也方便统一捕获异常。
  3. 异常处理:
    加上try/catch捕获请求失败的情况,避免因网络问题导致校验卡住,这里默认返回false触发错误,你也可以根据需求改成返回true或者自定义异常提示。

内容的提问来源于stack exchange,提问作者asdasdas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:30:47