Memulai
Siklus Hidup
Peramban
Pengembangan
Paket Luar
useLockFn
Membungkus fungsi async supaya tidak bisa jalan dua kali bersamaan.
Terkirim: 0
Menekan berulang saat masih berjalan tidak menambah kiriman.
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.
Pemasangan
npx 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 terkunci = false
return async (...args: P): Promise<V | undefined> => {
if (terkunci)
return undefined
terkunci = true
try {
return await fn(...args)
}
finally {
terkunci = false
}
}
}API
ts
export function useLockFn<P extends any[] = any[], V = any>(
fn: (...args: P) => Promise<V>,
)