debounce

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

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

API

debounce(fn, ms?)

پارامترها

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

بازگشت

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

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

نمونه

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 استنتاج می‌شود.