-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
40 lines (34 loc) · 782 Bytes
/
index.js
File metadata and controls
40 lines (34 loc) · 782 Bytes
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
const VERSION = '1.3.0';
const sleep = (timeout) => new Promise((resolve) => setTimeout(resolve, timeout));
const queueFactory = () => {
let queueImpl = Promise.resolve();
return (fx) => {
queueImpl = queueImpl.then(fx, fx);
return queueImpl;
}
};
const throttlingQueueFactory = ({ delay }) => {
let queueImpl = queueFactory();
return (fx) => {
const res = queueImpl(fx);
queueImpl(() => sleep(delay));
return res;
}
};
const singleInstance = (fx) => {
let instance;
return (...args) => {
if (!instance) {
instance = fx(...args);
instance.then(() => instance = null, () => instance = null);
}
return instance;
}
}
module.exports = {
queueFactory,
singleInstance,
sleep,
throttlingQueueFactory,
VERSION
}