In some cases it might be necessary to run validations that are asynchronous. For example, you might want to see if an email is already registered while the user is typing.
ajv already supports async validation, but using that means that the validate function will return a promise. This is a problem because we're calling validate inside the form's state reducer.