Home / Function/ defineAsyncComponent() — vue Function Reference

defineAsyncComponent() — vue Function Reference

Architecture documentation for the defineAsyncComponent() function in apiAsyncComponent.ts from the vue codebase.

Entity Profile

Dependency Diagram

graph TD
  9e39b153_d174_0e7a_5adf_182c83cd8c9f["defineAsyncComponent()"]
  3c165a4c_f9eb_ba3a_77d3_78acf2fd83e0["apiAsyncComponent.ts"]
  9e39b153_d174_0e7a_5adf_182c83cd8c9f -->|defined in| 3c165a4c_f9eb_ba3a_77d3_78acf2fd83e0
  1ef81692_ec2e_12ec_5fbd_ae6b16a249d4["Promise()"]
  9e39b153_d174_0e7a_5adf_182c83cd8c9f -->|calls| 1ef81692_ec2e_12ec_5fbd_ae6b16a249d4
  style 9e39b153_d174_0e7a_5adf_182c83cd8c9f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

src/v3/apiAsyncComponent.ts lines 31–117

export function defineAsyncComponent(
  source: (() => any) | AsyncComponentOptions
): AsyncComponentFactory {
  if (isFunction(source)) {
    source = { loader: source } as AsyncComponentOptions
  }

  const {
    loader,
    loadingComponent,
    errorComponent,
    delay = 200,
    timeout, // undefined = never times out
    suspensible = false, // in Vue 3 default is true
    onError: userOnError
  } = source

  if (__DEV__ && suspensible) {
    warn(
      `The suspensible option for async components is not supported in Vue2. It is ignored.`
    )
  }

  let pendingRequest: Promise<any> | null = null

  let retries = 0
  const retry = () => {
    retries++
    pendingRequest = null
    return load()
  }

  const load = (): Promise<any> => {
    let thisRequest: Promise<any>
    return (
      pendingRequest ||
      (thisRequest = pendingRequest =
        loader()
          .catch(err => {
            err = err instanceof Error ? err : new Error(String(err))
            if (userOnError) {
              return new Promise((resolve, reject) => {
                const userRetry = () => resolve(retry())
                const userFail = () => reject(err)
                userOnError(err, userRetry, userFail, retries + 1)
              })
            } else {
              throw err
            }
          })
          .then((comp: any) => {
            if (thisRequest !== pendingRequest && pendingRequest) {
              return pendingRequest
            }
            if (__DEV__ && !comp) {
              warn(
                `Async component loader resolved to undefined. ` +
                  `If you are using retry(), make sure to return its return value.`
              )
            }
            // interop module default
            if (
              comp &&
              (comp.__esModule || comp[Symbol.toStringTag] === 'Module')
            ) {
              comp = comp.default
            }
            if (__DEV__ && comp && !isObject(comp) && !isFunction(comp)) {
              throw new Error(`Invalid async component load result: ${comp}`)
            }
            return comp
          }))
    )
  }

  return () => {
    const component = load()

    return {
      component,
      delay,

Domain

Subdomains

Calls

Frequently Asked Questions

What does defineAsyncComponent() do?
defineAsyncComponent() is a function in the vue codebase, defined in src/v3/apiAsyncComponent.ts.
Where is defineAsyncComponent() defined?
defineAsyncComponent() is defined in src/v3/apiAsyncComponent.ts at line 31.
What does defineAsyncComponent() call?
defineAsyncComponent() calls 1 function(s): Promise.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free