debounce-microtasks
Version:
Debounce a function using microtasks instead of timers.
138 lines (93 loc) • 2.6 kB
Markdown
Debounce a function using microtasks instead of timers.
```typescript
import { debounceMicrotask } from "@vicary/debounce-microtask";
const debounced = debounceMicrotask((text: string) => {
console.log("debounced", text);
});
debounced("a");
debounced("b");
debounced("c");
await Promise.resolve();
// Prints "debounced a"
```
Throws when the specified limit is reached before the function is run, this is a
safety measure preventing recursive debounces. You may disable it with
`Infinity`.
Defaults to 1000.
```typescript
import { debounceMicrotask } from "@vicary/debounce-microtask";
const debounced = debounceMicrotask(
(text: string) => {
console.log("debounced", text);
},
{ debounceLimit: 1 },
);
debounced("a");
debounced("b"); // Throws
```
Specifies the action to take when the debounce limit is reached.
Possible values are `throw`, `ignore`, and `invoke`.
Defaults to `throw`.
```typescript
import { debounceMicrotask } from "@vicary/debounce-microtask";
const debounced = debounceMicrotask(
(text: string) => {
console.log("debounced", text);
},
{ limitAction: "throw" },
);
debounced("a");
debounced("b"); // Throws
```
Updates the calling arguments to the latest invocation.
Defaults to `false`.
```typescript
import { debounceMicrotask } from "@vicary/debounce-microtask";
const debounced = debounceMicrotask(
(text: string) => {
console.log("debounced", text);
},
{ updateArguments: true },
);
debounced("a");
debounced("b");
debounced("c");
await Promise.resolve();
// Prints "debounced c"
```
Returns a promisified debounce function, the promise resolves when the specified
function is called.
```typescript
import { debounceMicrotask } from "@vicary/debounce-microtask/promise";
const debounced = debounceMicrotask(
(text: string) => {
console.log("debounced", text);
},
{
updateArguments: true,
},
);
await Promise.all([
debounced("a"),
debounced("b"),
debounced("c"),
]);
// Only prints "debounced c"
```
If you find a bug or would like to suggest a new feature, please open an issue
or submit a pull request on GitHub.
DebounceMicrotask is licensed under the MIT License. See the LICENSE file for
more information.
If you find this project useful, please consider supporting it by donating to
the author.
[](https://github.com/sponsors/vicary)