Skip to content

useAsyncState

Category
Export Size
1.17 kB
Last Changed
15 minutes ago

响应式异步状态。不会阻塞你的设置函数,并且在 promise 准备就绪后会触发更改。状态默认为 shallowRef

Demo

Ready: false
Loading: true
{}

用法

ts
import { useAsyncState } from '@vueuse/core'
import axios from 'axios'

const { state, isReady, isLoading } = useAsyncState(
  axios
    .get('https://jsonplaceholder.typicode.com/todos/1')
    .then(t => t.data),
  { id: null },
)

类型声明

显示类型声明
typescript
export interface UseAsyncStateReturnBase<
  Data,
  Params extends any[],
  Shallow extends boolean,
> {
  state: Shallow extends true ? Ref<Data> : Ref<UnwrapRef<Data>>
  isReady: Ref<boolean>
  isLoading: Ref<boolean>
  error: Ref<unknown>
  execute: (delay?: number, ...args: Params) => Promise<Data>
}
export type UseAsyncStateReturn<
  Data,
  Params extends any[],
  Shallow extends boolean,
> = UseAsyncStateReturnBase<Data, Params, Shallow> &
  PromiseLike<UseAsyncStateReturnBase<Data, Params, Shallow>>
export interface UseAsyncStateOptions<Shallow extends boolean, D = any> {
  /**
   * 执行 Promise 的延迟时间。单位为毫秒。
   *
   * @default 0
   */
  delay?: number
  /**
   * 在函数调用后立即执行 Promise。
   * 如果设置了延迟,将应用延迟。
   *
   * 当设置为 false 时,需要手动执行。
   *
   * @default true
   */
  immediate?: boolean
  /**
   * 捕获到错误时的回调。
   */
  onError?: (e: unknown) => void
  /**
   * 捕获到成功时的回调。
   * @param {D} data
   */
  onSuccess?: (data: D) => void
  /**
   * 在执行 Promise 前将状态设置为初始状态。
   *
   * 当多次调用执行函数时(例如,刷新数据),这可能很有用。当设置为 false 时,当前状态保持不变,直到 Promise 解析。
   *
   * @default true
   */
  resetOnExecute?: boolean
  /**
   * 使用 shallowRef。
   *
   * @default true
   */
  shallow?: Shallow
  /**
   *
   * 在执行 execute 函数时抛出错误
   *
   * @default false
   */
  throwError?: boolean
}
/**
 * 响应式的异步状态。不会阻塞您的函数,并在 Promise 完成时触发更改。
 *
 * @see https://vueuse.org/useAsyncState
 * @param promise         要解析的异步函数
 * @param initialState    初始状态,在第一次评估完成之前使用
 * @param options
 */
export declare function useAsyncState<
  Data,
  Params extends any[] = [],
  Shallow extends boolean = true,
>(
  promise: Promise<Data> | ((...args: Params) => Promise<Data>),
  initialState: Data,
  options?: UseAsyncStateOptions<Shallow, Data>,
): UseAsyncStateReturn<Data, Params, Shallow>

Source

SourceDemoDocs

贡献者

Anthony Fu
丶远方
Flamenco
machete
Anthony Fu
Jules Raffoux
hfutsora
Brain777777
Mao Mr
Jelf
Sergey Shumov
lsdsjy
IIFelix
Alex Francev
webfansplz
Shinigami
Shahar Kosti
Alex Kozack
ordago
Jacob Clevenger
Antério Vieira

变更日志

v10.1.0 on 4/22/2023
d4db0 - feat: add support directly await (#3004)
v10.0.0-beta.1 on 3/23/2023
b636f - fix: fix toThrowError error type (#2898)
v9.13.0 on 2/18/2023
b4c63 - feat: get a promise function parameter type declaration (#2765)
v9.9.0 on 12/23/2022
ed64f - feat: add onSuccess callbacks (#2562)

Released under the MIT License.