If you have wondered how async validation works with Strickland, you will be delighted at how simple it is: a validator can use a Promise
.
Similar to how validate
normalizes a boolean into validation result with an isValid
property, a Promise
is normalized into a validation result with a validateAsync
property. The normalized validateAsync
property is a function that returns a Promise
resolving to the async result.
Let's take a look at a usernameIsAvailable
validator. Just like synchronous validators, async validators can resolve to either boolean results or validation results with isValid
properties.
import validate from 'strickland';function usernameIsAvailable(username) {return new Promise((resolve) => {if (username === 'marty') {// Resolve to an invalid validation result objectresolve({isValid: false,message: `"${username}" is not available`});}// Resolve to a booleanresolve(true);});}const result = validate(usernameIsAvailable, 'marty');result.validateAsync().then((asyncResult) => {/*asyncResult = {isValid: false,value: 'marty',message: '"marty" is not available'}*/});
When a validator returns a Promise
, the normalized validation result will include isValid: false
to indicate that the result is not (yet) valid.