vee-validate 以什么顺序与验证器一起工作? (同步和异步)
In what order vee-validate works with validator? (Sync and Async)
刚接触 Vue.js and VeeValidate 我想知道与字段关联的验证器函数(规则)的验证顺序是什么? (因为文档并没有真正提到它)
我已经习惯了 Angular docs about validator function 并且想知道 sync 验证器是否在 async 之前被调用。
在查看 VeeValidate 2.0.9 关于 validator.js 开始 line 649 的源代码后,我们可以注意到一个 _validate
方法(大致):
- 创建一个
Array
并在其上使用 Object.keys
then do a some 的字段规则
使用_test
method并存储result
(即直接验证的结果或Promise
)
堆栈异步(如果 fastExit
属性 在此验证器实例上为假则同步)验证器 (Promise
) 在数组中 push
如果同步验证器发生错误则退出(使用fastExit
属性)
reduce
包含所有结果的 Array
到 return 错误堆叠的最终结果
所以引用 MDN 关于 Object.keys
方法:
The Object.keys() method returns an array of a given object's property names, in the same order as we get with a normal loop.
并引用另一个 Whosebug answer:
Currently all major browsers loop over the properties of an object in
the order in which they were defined. Chrome does this as well, except
for a couple cases. [...] This behavior is explicitly left undefined
by the ECMAScript specification. In ECMA-262, section 12.6.4:
The mechanics of enumerating the properties ... is implementation dependent.
但是,规范与实现有很大不同。 ECMAScript 的所有现代实现都按照对象属性的定义顺序遍历它们。因此,Chrome 团队认为这是一个错误并将修复它。
结论
最终顺序将取决于 Object.keys
的浏览器实现,因此主要是按照验证器定义的顺序,但也可以按字母顺序排列!
默认情况下 fastExit
属性 是 false
但可以在验证器选项中被覆盖。此选项将采用同步验证器的第一个 false
结果和 return 它的错误。如果不设置结果将是所有验证器验证后所有错误的汇编。
刚接触 Vue.js and VeeValidate 我想知道与字段关联的验证器函数(规则)的验证顺序是什么? (因为文档并没有真正提到它)
我已经习惯了 Angular docs about validator function 并且想知道 sync 验证器是否在 async 之前被调用。
在查看 VeeValidate 2.0.9 关于 validator.js 开始 line 649 的源代码后,我们可以注意到一个 _validate
方法(大致):
- 创建一个
Array
并在其上使用Object.keys
then do a some 的字段规则 使用
_test
method并存储result
(即直接验证的结果或Promise
)堆栈异步(如果
fastExit
属性 在此验证器实例上为假则同步)验证器 (Promise
) 在数组中push
如果同步验证器发生错误则退出(使用
fastExit
属性)reduce
包含所有结果的Array
到 return 错误堆叠的最终结果
所以引用 MDN 关于 Object.keys
方法:
The Object.keys() method returns an array of a given object's property names, in the same order as we get with a normal loop.
并引用另一个 Whosebug answer:
Currently all major browsers loop over the properties of an object in the order in which they were defined. Chrome does this as well, except for a couple cases. [...] This behavior is explicitly left undefined by the ECMAScript specification. In ECMA-262, section 12.6.4:
The mechanics of enumerating the properties ... is implementation dependent.
但是,规范与实现有很大不同。 ECMAScript 的所有现代实现都按照对象属性的定义顺序遍历它们。因此,Chrome 团队认为这是一个错误并将修复它。
结论
最终顺序将取决于 Object.keys
的浏览器实现,因此主要是按照验证器定义的顺序,但也可以按字母顺序排列!
默认情况下 fastExit
属性 是 false
但可以在验证器选项中被覆盖。此选项将采用同步验证器的第一个 false
结果和 return 它的错误。如果不设置结果将是所有验证器验证后所有错误的汇编。