# fallbackAsync

> This document is the Markdown version of [valibot.dev/api/fallbackAsync/](https://valibot.dev/api/fallbackAsync/). For the complete documentation index, see [llms.txt](https://valibot.dev/llms.txt).

Returns a fallback value as output if the input does not match the schema.

```ts
const Schema = v.fallbackAsync<TSchema, TFallback>(schema, fallback);
```

## Generics

- `TSchema` `extends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>`
- `TFallback` `extends FallbackAsync<TSchema>`

## Parameters

- `schema` `TSchema`
- `fallback` `TFallback`

### Explanation

`fallbackAsync` allows you to define a fallback value for the output that will be used if the validation of the input fails. This means that no issues will be returned when using `fallbackAsync` and the schema will always return an output.

> If you only want to set a default value for `null` or `undefined` inputs, you should use [`optionalAsync`](/api/optionalAsync.md), [`nullableAsync`](/api/nullableAsync.md) or [`nullishAsync`](/api/nullishAsync.md) instead.

> The fallback value is not validated. Make sure that the fallback value matches your schema.

## Returns

- `Schema` `SchemaWithFallbackAsync<TSchema, TFallback>`

## Examples

The following examples show how `fallbackAsync` can be used.

### Unique username schema

Schema that will always return a unique username.

> By using a function as the `fallbackAsync` parameter, the schema will return any unique username each time the input does not match the schema.

```ts
import { getAnyUniqueUsername, isUsernameUnique } from '~/api';

const UniqueUsernameSchema = v.fallbackAsync(
  v.pipeAsync(v.string(), v.minLength(4), v.checkAsync(isUsernameUnique)),
  getAnyUniqueUsername
);
```

## Related

The following APIs can be combined with `fallbackAsync`.

### Schemas

[`any`](/api/any.md), [`array`](/api/array.md), [`bigint`](/api/bigint.md), [`blob`](/api/blob.md), [`boolean`](/api/boolean.md), [`custom`](/api/custom.md), [`date`](/api/date.md), [`enum`](/api/enum.md), [`exactOptional`](/api/exactOptional.md), [`file`](/api/file.md), [`function`](/api/function.md), [`instance`](/api/instance.md), [`intersect`](/api/intersect.md), [`lazy`](/api/lazy.md), [`literal`](/api/literal.md), [`looseObject`](/api/looseObject.md), [`looseTuple`](/api/looseTuple.md), [`map`](/api/map.md), [`nan`](/api/nan.md), [`never`](/api/never.md), [`nonNullable`](/api/nonNullable.md), [`nonNullish`](/api/nonNullish.md), [`nonOptional`](/api/nonOptional.md), [`null`](/api/null.md), [`nullable`](/api/nullable.md), [`nullish`](/api/nullish.md), [`number`](/api/number.md), [`object`](/api/object.md), [`objectWithRest`](/api/objectWithRest.md), [`optional`](/api/optional.md), [`picklist`](/api/picklist.md), [`promise`](/api/promise.md), [`record`](/api/record.md), [`set`](/api/set.md), [`strictObject`](/api/strictObject.md), [`strictTuple`](/api/strictTuple.md), [`string`](/api/string.md), [`symbol`](/api/symbol.md), [`tuple`](/api/tuple.md), [`tupleWithRest`](/api/tupleWithRest.md), [`undefined`](/api/undefined.md), [`undefinedable`](/api/undefinedable.md), [`union`](/api/union.md), [`unknown`](/api/unknown.md), [`variant`](/api/variant.md), [`void`](/api/void.md)

### Methods

[`config`](/api/config.md), [`getDefault`](/api/getDefault.md), [`getFallback`](/api/getFallback.md), [`keyof`](/api/keyof.md), [`message`](/api/message.md), [`omit`](/api/omit.md), [`pick`](/api/pick.md), [`unwrap`](/api/unwrap.md)

### Actions

[`args`](/api/args.md), [`base64`](/api/base64.md), [`bic`](/api/bic.md), [`brand`](/api/brand.md), [`bytes`](/api/bytes.md), [`check`](/api/check.md), [`checkItems`](/api/checkItems.md), [`codePoints`](/api/codePoints.md), [`creditCard`](/api/creditCard.md), [`cuid2`](/api/cuid2.md), [`decimal`](/api/decimal.md), [`description`](/api/description.md), [`digits`](/api/digits.md), [`domain`](/api/domain.md), [`email`](/api/email.md), [`emoji`](/api/emoji.md), [`empty`](/api/empty.md), [`endsWith`](/api/endsWith.md), [`entries`](/api/entries.md), [`everyItem`](/api/everyItem.md), [`excludes`](/api/excludes.md), [`filterItems`](/api/filterItems.md), [`findItem`](/api/findItem.md), [`finite`](/api/finite.md), [`flavor`](/api/flavor.md), [`graphemes`](/api/graphemes.md), [`gtValue`](/api/gtValue.md), [`guard`](/api/guard.md), [`hash`](/api/hash.md), [`hexadecimal`](/api/hexadecimal.md), [`hexColor`](/api/hexColor.md), [`imei`](/api/imei.md), [`includes`](/api/includes.md), [`integer`](/api/integer.md), [`ip`](/api/ip.md), [`ipv4`](/api/ipv4.md), [`ipv6`](/api/ipv6.md), [`isbn`](/api/isbn.md), [`isrc`](/api/isrc.md), [`isoDate`](/api/isoDate.md), [`isoDateTime`](/api/isoDateTime.md), [`isoDateTimeSecond`](/api/isoDateTimeSecond.md), [`isoTime`](/api/isoTime.md), [`isoTimeSecond`](/api/isoTimeSecond.md), [`isoTimestamp`](/api/isoTimestamp.md), [`isoWeek`](/api/isoWeek.md), [`ksuid`](/api/ksuid.md), [`length`](/api/length.md), [`ltValue`](/api/ltValue.md), [`mac`](/api/mac.md), [`mac48`](/api/mac48.md), [`mac64`](/api/mac64.md), [`mapItems`](/api/mapItems.md), [`maxBytes`](/api/maxBytes.md), [`maxCodePoints`](/api/maxCodePoints.md), [`maxEntries`](/api/maxEntries.md), [`maxGraphemes`](/api/maxGraphemes.md), [`maxLength`](/api/maxLength.md), [`maxSize`](/api/maxSize.md), [`maxValue`](/api/maxValue.md), [`maxWords`](/api/maxWords.md), [`metadata`](/api/metadata.md), [`mimeType`](/api/mimeType.md), [`minBytes`](/api/minBytes.md), [`minCodePoints`](/api/minCodePoints.md), [`minEntries`](/api/minEntries.md), [`minGraphemes`](/api/minGraphemes.md), [`minLength`](/api/minLength.md), [`minSize`](/api/minSize.md), [`minValue`](/api/minValue.md), [`minWords`](/api/minWords.md), [`multipleOf`](/api/multipleOf.md), [`nanoid`](/api/nanoid.md), [`nonEmpty`](/api/nonEmpty.md), [`notBytes`](/api/notBytes.md), [`notCodePoints`](/api/notCodePoints.md), [`notEntries`](/api/notEntries.md), [`notGraphemes`](/api/notGraphemes.md), [`notLength`](/api/notLength.md), [`notSize`](/api/notSize.md), [`notValue`](/api/notValue.md), [`notValues`](/api/notValues.md), [`notWords`](/api/notWords.md), [`octal`](/api/octal.md), [`parseJson`](/api/parseJson.md), [`partialCheck`](/api/partialCheck.md), [`rawCheck`](/api/rawCheck.md), [`rawTransform`](/api/rawTransform.md), [`readonly`](/api/readonly.md), [`reduceItems`](/api/reduceItems.md), [`regex`](/api/regex.md), [`returns`](/api/returns.md), [`rfcEmail`](/api/rfcEmail.md), [`safeInteger`](/api/safeInteger.md), [`size`](/api/size.md), [`slug`](/api/slug.md), [`someItem`](/api/someItem.md), [`sortItems`](/api/sortItems.md), [`startsWith`](/api/startsWith.md), [`stringifyJson`](/api/stringifyJson.md), [`title`](/api/title.md), [`toCamelCase`](/api/toCamelCase.md), [`toKebabCase`](/api/toKebabCase.md), [`toLowerCase`](/api/toLowerCase.md), [`toMaxValue`](/api/toMaxValue.md), [`toMinValue`](/api/toMinValue.md), [`toPascalCase`](/api/toPascalCase.md), [`toSnakeCase`](/api/toSnakeCase.md), [`toUpperCase`](/api/toUpperCase.md), [`transform`](/api/transform.md), [`trim`](/api/trim.md), [`trimEnd`](/api/trimEnd.md), [`trimStart`](/api/trimStart.md), [`ulid`](/api/ulid.md), [`url`](/api/url.md), [`uuid`](/api/uuid.md), [`value`](/api/value.md), [`values`](/api/values.md), [`words`](/api/words.md)

### Utils

[`isOfKind`](/api/isOfKind.md), [`isOfType`](/api/isOfType.md)

### Async

[`arrayAsync`](/api/arrayAsync.md), [`awaitAsync`](/api/awaitAsync.md), [`checkAsync`](/api/checkAsync.md), [`customAsync`](/api/customAsync.md), [`exactOptionalAsync`](/api/exactOptionalAsync.md), [`getDefaultsAsync`](/api/getDefaultsAsync.md), [`getFallbacksAsync`](/api/getFallbacksAsync.md), [`intersectAsync`](/api/intersectAsync.md), [`lazyAsync`](/api/lazyAsync.md), [`looseObjectAsync`](/api/looseObjectAsync.md), [`looseTupleAsync`](/api/looseTupleAsync.md), [`mapAsync`](/api/mapAsync.md), [`nonNullableAsync`](/api/nonNullableAsync.md), [`nonNullishAsync`](/api/nonNullishAsync.md), [`nonOptionalAsync`](/api/nonOptionalAsync.md), [`nullableAsync`](/api/nullableAsync.md), [`nullishAsync`](/api/nullishAsync.md), [`objectAsync`](/api/objectAsync.md), [`objectWithRestAsync`](/api/objectWithRestAsync.md), [`optionalAsync`](/api/optionalAsync.md), [`parseAsync`](/api/parseAsync.md), [`parserAsync`](/api/parserAsync.md), [`partialAsync`](/api/partialAsync.md), [`partialCheckAsync`](/api/partialCheckAsync.md), [`pipeAsync`](/api/pipeAsync.md), [`rawCheckAsync`](/api/rawCheckAsync.md), [`rawTransformAsync`](/api/rawTransformAsync.md), [`recordAsync`](/api/recordAsync.md), [`requiredAsync`](/api/requiredAsync.md), [`safeParseAsync`](/api/safeParseAsync.md), [`safeParserAsync`](/api/safeParserAsync.md), [`setAsync`](/api/setAsync.md), [`strictObjectAsync`](/api/strictObjectAsync.md), [`strictTupleAsync`](/api/strictTupleAsync.md), [`transformAsync`](/api/transformAsync.md), [`tupleAsync`](/api/tupleAsync.md), [`tupleWithRestAsync`](/api/tupleWithRestAsync.md), [`unionAsync`](/api/unionAsync.md), [`variantAsync`](/api/variantAsync.md)
