1.38.0debounce
اجرای تابع را تا زمانی که مدت مشخصی از آخرین فراخوانی گذشته باشد به تأخیر میاندازد.
debounce(fn, delay):(...args: TArgs) => voidپارامترها
fn(...args: TArgs) => voidالزامیتابعی که پس از گذشت زمان مشخصشده بدون فراخوانی جدید اجرا میشود.
delaynumberالزامیمدت تأخیر بر حسب میلیثانیه قبل از اجرای تابع.
مقدار بازگشتی
(...args: TArgs) => voidیک تابع debounce شده که هر بار فراخوانی شود تایمر قبلی خود را reset میکند.
مثالها
استفاده پایه
تابع پس از مدت زمان مشخصشده اجرا میشود.
import { debounce } from "@cyref/js";
const logMessage = debounce(() => {
console.log("Executed");
}, 500);
logMessage();ریست شدن زمان تأخیر
فراخوانی دوباره تابع debounce شده، timeout قبلی را لغو کرده و زمان تأخیر را از ابتدا شروع میکند.
import { debounce } from "@cyref/js";
const search = debounce((query: string) => {
console.log("Searching:", query);
}, 500);
search("c");
search("cy");
search("cyref");
// Only the last call is executed after 500ms.
// Searching: cyrefارسال آرگومان
آرگومانهایی که به تابع debounce شده ارسال میشوند، هنگام اجرای تابع اصلی به آن منتقل میشوند.
import { debounce } from "@cyref/js";
const greet = debounce((name: string) => {
console.log(`Hello, ${name}!`);
}, 300);
greet("Amir");
// After 300ms:
// Hello, Amir!چند آرگومان
تابع debounce شده میتواند چند آرگومان را با همان typeهای تابع اصلی دریافت کند.
import { debounce } from "@cyref/js";
const calculate = debounce(
(a: number, b: number) => {
console.log(a + b);
},
500,
);
calculate(10, 20);
// After 500ms:
// 30فراخوانیهای متوالی
اگر چند فراخوانی قبل از تمام شدن زمان تأخیر انجام شوند، فقط آخرین فراخوانی اجرا میشود.
import { debounce } from "@cyref/js";
const save = debounce((value: string) => {
console.log("Saved:", value);
}, 1000);
save("first");
setTimeout(() => {
save("second");
}, 300);
setTimeout(() => {
save("third");
}, 600);
// Only "third" is executed after the final 1000ms delay.
// Saved: thirdمناسب برای رویدادهای ورودی
میتوان از debounce برای بهتأخیر انداختن callbackهایی که مرتب اجرا میشوند، مانند رویدادهای input یا search، استفاده کرد.
import { debounce } from "@cyref/js";
const handleSearch = debounce((value: string) => {
console.log("Search:", value);
}, 400);
handleSearch("Java");
handleSearch("JavaScript");
// Only the latest call is executed after 400ms.
// Search: JavaScript