作为Vue.js和VeeValidate的新手,我想知道与字段关联的验证器函数(规则)的验证顺序是什么?(因为文档并没有真正提到它)
我习惯了有关验证器功能的 Angular 文档,并且想知道是否在异步验证器之前调用了同步验证器。
作为Vue.js和VeeValidate的新手,我想知道与字段关联的验证器函数(规则)的验证顺序是什么?(因为文档并没有真正提到它)
我习惯了有关验证器功能的 Angular 文档,并且想知道是否在异步验证器之前调用了同步验证器。
在查看VeeValidate 2.0.9 源代码关于 validator.js 开始行 649之后,我们可以注意到一个_validate
方法(大致):
Array
使用字段规则创建一个Object.keys
然后对其执行一些操作使用该_test
方法并存储result
(即直接验证的结果或 a Promise
)
堆栈异步(如果fastExit
此 Validator 实例上的属性为 false,则同步)验证器(Promise
)在一个数组中,带有push
fastExit
如果同步验证器(使用属性)发生错误,则退出
reduce
包含Array
所有结果以返回带有错误堆叠的最终结果
所以引用MDN关于该Object.keys
方法:
Object.keys()方法返回给定对象的属性名称数组,其顺序与我们在正常循环中得到的顺序相同。
并引用另一个stackoverflow答案:
目前所有主流浏览器都按照定义的顺序循环对象的属性。Chrome 也这样做,除了几个案例。[...] ECMAScript 规范明确未定义此行为。在 ECMA-262 中,第 12.6.4 节:
枚举属性的机制......取决于实现。
但是,规范与实现有很大不同。ECMAScript 的所有现代实现都按照定义的顺序遍历对象属性。因此,Chrome 团队认为这是一个错误,并将对其进行修复。
最终顺序将取决于 的浏览器实现Object.keys
,因此主要取决于验证器的定义顺序,但也可以按字母顺序排列!
默认情况下,该fastExit
属性是false
但可以在验证器选项中被覆盖。false
此选项将从同步验证器获取第一个结果并返回它的错误。如果未设置,则结果将在每个验证器验证后汇总所有错误。