/
event-loop-delay.mjs
44 lines (37 loc) · 1.11 KB
/
event-loop-delay.mjs
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
/**
* @author 1uokun <https://github.com/1uokun>
* @copyright 2020 1uokun. All rights reserved.
* See LICENSE file in root directory for full license.
*/
const listenersMap = new WeakMap();
function delay(func,wait=0) {
listenersMap.set(func, []);
const queue = listenersMap.get(func);
const f = function *() {
while(queue.length){
yield queue.shift();
}
};
return function(){
if(queue.length>0){
queue.push({next:null});
queue[queue.length-2].next = func;
return false
}
queue.push({next:null});
func();
let timer = setInterval(()=>{
let a = f().next();
if(a.done){
clearInterval(timer);
return false
}
if(typeof a.value.next === "function"){
a.value.next.call(this);
}
},wait);
}.bind(this)
}
export default delay;
export { delay };
//# sourceMappingURL=event-loop-delay.mjs.map