kliping.pro
  • Docs
  • Directory
  • Colors
  • Typeset
Hooks
  • State7
  • Advanced6
    • useCreation
    • useCustomCompareEffect
    • useLatest
    • useLockFn
    • useMemoizedFn
    • usePrevious
  • Lifecycle16
  • Browser21
  • Development1
  • Third-Party4
  • Libraries4

useLockFn

PreviousNext

Membungkus fungsi async supaya tidak bisa jalan dua kali bersamaan.

Gunanya satu dan konkret: tombol kirim yang ditekan dua kali tidak mengirim dua kali. Panggilan yang datang saat panggilan sebelumnya belum selesai diabaikan — bukan diantrikan, bukan ditunda.

Kuncinya dilepas di finally, jadi ikut terlepas juga saat fungsinya melempar. Tanpa itu satu kegagalan mengunci tombolnya selamanya, dan itu jenis cacat yang cuma muncul di hari yang buruk.

Installation ​

pnpm dlx shadcn-vue@latest add @kliping/use-lock-fn

Perlu @kliping terdaftar di components.json project Anda. Lihat cara menyiapkannya.

Tanpa dependensi — tidak ada berkas lain yang ikut terpasang.

Salin kode berikut ke project Anda.

ts
export function useLockFn<P extends any[] = any[], V = any>(fn: (...args: P) => Promise<V>) {
  let locked = false

  return async (...args: P): Promise<V | undefined> => {
    if (locked) return undefined

    locked = true
    try {
      return await fn(...args)
    } finally {
      locked = false
    }
  }
}

API ​

ts
export function useLockFn<P extends any[] = any[], V = any>(
  fn: (...args: P) => Promise<V>,
)
PrevioususeLatestNext useMemoizedFn

On This Page

InstallationAPI
Dirilis di bawah lisensi MIT. Ditulis ulang untuk Vue dari shadcn-vue, shadcn-ui-blocks, dan shadcn-hooks. Hak cipta © 2026 Kliping