首页 > 解决方案 > 当我已经得到错误时,如何防止下一个检查功能?

问题描述

我使用 yup 针对架构验证我的输入。

name空数组。应该在 min 函数中失败。但无论如何它继续测试功能。

如何防止这种情况?如果它失败了,min它不应该继续下一个功能。

可以吗?

需要明确的是:这个名字是[]所以它在min功能上失败了。为什么还要继续检查test功能?

码沙盒.io

import * as yup from "yup";

console.clear();

let schema = yup.object().shape({
  name: yup.array().min(1).test('x', 'y', (v) => {
    console.log({ v });

    return true;
  })
});

// check validity
schema
  .validate({
    name: []
  }, { abortEarly: true })
  .then((valid) => {
    console.log({ valid });
  })
  .catch((e) => {
    console.log({ e });
  });

标签: javascriptyup

解决方案


根据这个问题,这似乎是不可能的:

测试是并行运行的,因此没有“先前的检查”,因为它们都在同一时间发生在一个模式中。

您可以通过abortEarly选项控制要在 ValidationError 中收集多少错误:是所有错误 ( abortEarly: false) 还是仅第一个 ( abortEarly: true)。但这不会阻止您运行所有验证功能。


推荐阅读