Skip to content

debounce

دیبانس: وقتی تابعی پشت سر هم راه می‌افتد، تنها پس از آنکه راه‌اندازی‌ها به مدت ms میلی‌ثانیه بایستد اجرا می‌شود. جایی به کار بیاورید که فقط وضعیت پایانی مهم است: جست‌وجو هنگام تایپ، تغییر اندازهٔ پنجره، ذخیرهٔ خودکار.

اگر مقدارهای میانی را هم لازم دارید، از throttle استفاده کنید.

API

debounce(fn, ms?)

پارامترها

پارامترتوضیحنوعپیش‌فرض
fnتابعی که دیبانس می‌شودFunctionالزامی
msمدت آرامش (میلی‌ثانیه)number500

بازگشت

تابعی دیبانس‌شده که this محل فراخوانی و آخرین آرگومان‌ها را نگه می‌دارد، به‌علاوهٔ:

عضوتوضیحنوع
cancel()فراخوانی در انتظار را دور می‌ریزد() => void
flush()فراخوانی در انتظار را همین حالا اجرا می‌کند (مثلاً پیش از ارسال)() => void
pending()اینکه فراخوانی‌ای در انتظار هست یا نه() => boolean

نمونه

js
import { debounce } from 'ranuts';

const save = debounce((draft) => api.save(draft), 800);
input.addEventListener('input', (e) => save(e.target.value));

form.addEventListener('submit', () => save.flush()); // تا آخرین کلید از دست نرود
onUnmount(() => save.cancel());

یادداشت‌ها

  1. تنها آخرین فراخوانی اجرا می‌شود، آن هم با آرگومان‌های همان فراخوانی.
  2. this از محل فراخوانی گرفته می‌شود: obj.handler() مقدار obj را می‌بیند.
  3. هنگام برچیدن حتماً cancel() را صدا بزنید، وگرنه زمان‌سنجِ در انتظار در بستری از میان رفته شلیک می‌کند.
  4. نوع‌دهی کامل: نوع آرگومان‌ها و مقدار بازگشتی از fn استنتاج می‌شود.

منتشرشده تحت مجوز MIT.