← Wszystkie zadaniaJavaScript · Middle
debounce
Napisz funkcję debounce(fn, ms). Zwraca ona opakowanie, które wywołuje fn dopiero ms milisekund po ostatnim wywołaniu opakowania. Każde nowe wywołanie zaczyna odliczanie od nowa.
fn dostaje argumenty ostatniego wywołania i ten sam this, z którym wywołano opakowanie. Tak zwykle ogranicza się wyszukiwanie podczas pisania: zapytanie idzie, gdy użytkownik przestanie pisać.
Ctrl+Enter uruchamia testy. Tab robi wcięcie; aby wyjść z edytora klawiaturą, naciśnij Esc, a potem Tab. Kod zapisuje się w tej przeglądarce.
Testy (4)
const f = fn(); const d = debounce(f, 50); d(1); d(2); d(3); expect(f).toHaveBeenCalledTimes(0); await wait(80); expect(f).toHaveBeenCalledTimes(1); expect(f).toHaveBeenLastCalledWith(3);
const f = fn(); const d = debounce(f, 50); d('a'); await wait(30); d('b'); await wait(30); expect(f).toHaveBeenCalledTimes(0); await wait(45); expect(f).toHaveBeenCalledTimes(1); expect(f).toHaveBeenLastCalledWith('b');
const f = fn(); const d = debounce(f, 30); d(1); await wait(50); d(2); await wait(50); expect(f).toHaveBeenCalledTimes(2);
let seen; const obj = { value: 42 }; obj.read = debounce(function () { seen = this.value; }, 20); obj.read(); await wait(40); expect(seen).toBe(42);