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

在函数内抛出多个异常:表单校验仅能捕获首个错误该如何解决

解决方案

你遇到的核心问题是单次校验失败就立即抛出异常,直接中断了后续的校验逻辑,只需要调整为先收集全量校验错误、所有规则执行完成后再统一抛出即可,具体实现可以参考两种方案:

方案1:使用标准AggregateError聚合所有错误后抛出

这是兼容性最好的标准实现,上层可以直接从错误实例的errors属性中拿到完整的错误列表:

const validateErrors = []
this.form.inputs.forEach(input => {
  if (input.required && !input.value) {
    validateErrors.push(new AppError({ 
      customMessage: new Notification(notificationTypes.Error, `${input.label} not filled`)
    }))
  }
})

if (validateErrors.length) {
  // 第一个参数传入错误数组,第二个参数传入聚合错误的通用描述
  throw new AggregateError(validateErrors, '表单校验未通过')
}

上层统一处理的逻辑可以直接遍历所有错误输出提示:

try {
  // 调用校验逻辑
  validateForm()
} catch (err) {
  if (err instanceof AggregateError) {
    err.errors.forEach(validateErr => {
      // 依次处理每个校验错误,比如全局提示展示
      showNotification(validateErr.customMessage)
    })
  } else {
    // 其他原有错误处理逻辑
  }
}

方案2:合并错误信息为单个自定义错误抛出

如果不想改动上层原有错误处理逻辑,也可以把所有校验错误的信息合并到单个AppError中抛出:

const validateErrors = []
this.form.inputs.forEach(input => {
  if (input.required && !input.value) {
    validateErrors.push(`${input.label} 未填写`)
  }
})

if (validateErrors.length) {
  throw new AppError({ 
    customMessage: new Notification(notificationTypes.Error, `校验失败:${validateErrors.join('、')}`)
  })
}

这种方案上层不需要做额外适配,直接就能展示所有缺失的字段提示。


内容的提问来源于stack exchange,提问作者Sergio Martín

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:45:03