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>,
)