forked from sindresorhus/p-debounce
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
42 lines (32 loc) · 868 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'use strict';
const pDebounce = (fn, wait, options = {}) => {
if (!Number.isFinite(wait)) {
throw new TypeError('Expected `wait` to be a finite number');
}
let leadingValue;
let timer;
let resolveList = [];
return function (...arguments_) {
return new Promise(resolve => {
const runImmediately = options.leading && !timer;
clearTimeout(timer);
timer = setTimeout(() => {
timer = null;
const result = options.leading ? leadingValue : fn.apply(this, arguments_);
for (resolve of resolveList) {
resolve(result);
}
resolveList = [];
}, wait);
if (runImmediately) {
leadingValue = fn.apply(this, arguments_);
resolve(leadingValue);
} else {
resolveList.push(resolve);
}
});
};
};
module.exports = pDebounce;
// TODO: Remove this for the next major release
module.exports.default = pDebounce;