Unless otherwise specified you can always specify the message option to customize the message returned if the validator doesn't pass.Just remember to not include the attribute name since it's automatically prepended to the error message.You can use the async validate function even if no validations are async, it still returns a promise.
One example would be to check if a username is already used by asking the server.
You can tell to use any A compatible promise implemention like this: There are already many validation libraries out there today but most of them are very tightly coupled to a language or framework.
The goal of is to provide a cross framework and cross language way of validating data.
Besides accepting all options as the non async validation function it also accepts two additional options; clean Attributes which, unless before resolving the promise and wrap Errors which can be a function or constructor that will be called with the errors, options, attributes and constraints if an error occurs.
This allows you to define a better way of catching validation errors.