-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.js
60 lines (51 loc) · 1.09 KB
/
utils.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
debounce = (fn, waitTime) => {
let timeout;
return (...args) => {
clearTimeout(timeout);
timeout = setTimeout(() => fn(args), waitTime);
};
};
throttle = (fn, waitTime) => {
let timeout = null;
let previous = 0;
const later = (args) => {
previous = Date.now();
timeout = null;
fn(args);
};
return (...args) => {
const now = Date.now();
const remaining = waitTime - (now - previous);
if (remaining <= 0 || remaining > waitTime) {
if (timeout) {
clearTimeout(timeout);
}
later(args);
} else if (!timeout) {
timeout = setTimeout(() => later(args), remaining);
}
};
};
queue = (fn, waitTime) => {
const funcQueue = [];
let isWaiting;
const executeFunc = (params) => {
isWaiting = true;
fn(params);
setTimeout(next, waitTime);
};
const next = () => {
isWaiting = false;
if (funcQueue.length) {
var params = funcQueue.shift();
executeFunc(params);
}
};
return (...args) => {
if (isWaiting) {
funcQueue.push(args);
} else {
executeFunc(args);
}
};
};