Debouncer in Polymer 2.0
Asked Answered
N

1

15

Simple question, but no documentation is to be found on the subject : is there a debouncer in Polymer 2.0? If so, how can it be used? this.debounce was an instance method in 1.0, but it appears to have disappeared.

Thanks in advance!

Nena answered 13/3, 2017 at 20:50 Comment(0)
B
33

Legacy 1.x debouncer

You can use the 1.x this.debounce() method via Polymer.LegacyElementMixin:

class XFoo extends Polymer.LegacyElementMixin(Polymer.Element) {
  ...
  _onClick() {
    this.debounce('myDebouncer', callback, 2000);
  }
}

codepen

New 2.x debouncer

The 2.0 equivalent is Polymer.Debouncer.debounce(debouncer, asyncModule, cb), where:

This function returns a Polymer.Debouncer instance, which has a cancel() method, equivalent to 1.x this.cancelDebouncer(JOB_NAME). That instance should be passed to the debounce() method on the next call for debouncing to work properly.

Example usage:

class XFoo extends Polymer.Element {
  ...
  _onClick() {
    this._debouncer = Polymer.Debouncer.debounce(
       this._debouncer, // initially undefined
       Polymer.Async.timeOut.after(2000),
       callback);
  }
}

codepen

Bagworm answered 13/3, 2017 at 21:43 Comment(3)
@Nena No problem :)Bagworm
I'm not sure to understand what is the first argument for, most of the time you'll use the same reference as the one returned by the function. This looks hacky.Quintus
For anyone else blindly copying — Polymer.Async.timeout.after should in fact be Polymer.Async.timeOut.after (uppercase O).Handily

© 2022 - 2024 — McMap. All rights reserved.