useDebounceFn
Debounce execution of a function.
Debounce is an overloaded waiter: if you keep asking him your requests will be ignored until you stop and give him some time to think about your latest inquiry.
Demo
Usage
js
import { useDebounceFn, useEventListener } from '@vueuse/core'
const debouncedFn = useDebounceFn(() => {
// do something
}, 1000)
useEventListener(window, 'resize', debouncedFn)
您也可以傳遞第三個參數,設定最大等待時間,類似於 lodash debounce
js
import { useDebounceFn, useEventListener } from '@vueuse/core'
// If no invokation after 5000ms due to repeated input,
// the function will be called anyway.
const debouncedFn = useDebounceFn(() => {
// do something
}, 1000, { maxWait: 5000 })
useEventListener(window, 'resize', debouncedFn)
或者,您可以透過 Promise 操作取得函式的回傳值。
js
import { useDebounceFn } from '@vueuse/core'
const debouncedRequest = useDebounceFn(() => 'response', 1000)
debouncedRequest().then((value) => {
console.log(value) // 'response'
})
// or use async/await
async function doRequest() {
const value = await debouncedRequest()
console.log(value) // 'response'
}
由於在開發者不需要回傳值時,未處理的拒絕錯誤非常惱人,因此如果函式被取消,預設情況下 Promise 將**不會**被拒絕。您需要指定選項 rejectOnCancel: true
以捕獲拒絕。
js
import { useDebounceFn } from '@vueuse/core'
const debouncedRequest = useDebounceFn(() => 'response', 1000, { rejectOnCancel: true })
debouncedRequest()
.then((value) => {
// do something
})
.catch(() => {
// do something when canceled
})
// calling it again will cancel the previous request and gets rejected
setTimeout(debouncedRequest, 500)
Recommended Reading
Type Declarations
typescript
/**
* Debounce execution of a function.
*
* @see https://vueuse.dev.org.tw/useDebounceFn
* @param fn A function to be executed after delay milliseconds debounced.
* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
* @param options Options
*
* @return A new, debounce, function.
*/
export declare function useDebounceFn<T extends FunctionArgs>(
fn: T,
ms?: MaybeRefOrGetter<number>,
options?: DebounceFilterOptions,
): PromisifyFn<T>
Source
Contributors
Changelog
v12.8.0
on 2025/3/5v10.0.0-beta.4
on 2023/4/134d757
- feat(types)!: rename MaybeComputedRef
to MaybeRefOrGetter