debounce
دیبانس: وقتی تابعی پشت سر هم راه میافتد، تنها پس از آنکه راهاندازیها به مدت ms میلیثانیه بایستد اجرا میشود. جایی به کار بیاورید که فقط وضعیت پایانی مهم است: جستوجو هنگام تایپ، تغییر اندازهٔ پنجره، ذخیرهٔ خودکار.
اگر مقدارهای میانی را هم لازم دارید، از throttle استفاده کنید.
API
debounce(fn, ms?)
پارامترها
| پارامتر | توضیح | نوع | پیشفرض |
|---|---|---|---|
fn | تابعی که دیبانس میشود | Function | الزامی |
ms | مدت آرامش (میلیثانیه) | number | 500 |
بازگشت
تابعی دیبانسشده که 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());یادداشتها
- تنها آخرین فراخوانی اجرا میشود، آن هم با آرگومانهای همان فراخوانی.
thisاز محل فراخوانی گرفته میشود:obj.handler()مقدارobjرا میبیند.- هنگام برچیدن حتماً
cancel()را صدا بزنید، وگرنه زمانسنجِ در انتظار در بستری از میان رفته شلیک میکند. - نوعدهی کامل: نوع آرگومانها و مقدار بازگشتی از
fnاستنتاج میشود.