-
Notifications
You must be signed in to change notification settings - Fork 0
/
delay.js
70 lines (55 loc) · 1.08 KB
/
delay.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
61
62
63
64
65
66
67
68
69
70
var Iterator = require('stupid-iterator');
function Delay(opts){
var self = {};
var opts = opts || {};
var collection = [];
var tick = opts.tick;
/*
* Private
*/
function init(){
}
function update(){
var now = Date.now();
for (var i = 0; i < collection.length; i++) {
var delayObject = collection[i];
if(delayObject.time <= now){
if(collection.length === 1) pause();
delayObject.callback();
Iterator.remove(delayObject, collection);
}
};
}
function add(_time, _callback){
start();
var delayObject = {time: parseInt(_time) + Date.now(), callback: _callback};
Iterator.add(delayObject, collection);
}
function pause(){
tick.remove(update);
}
function start(){
try{
tick.add(update);
}catch(e){
console.error("Module missing: 'stupid-tick'. Download the 'stupid-tick' module from npm or github");
}
}
function destroy(){
pause();
collection = [];
}
/*
* Public
*/
self.add = add;
self.destroy = destroy;
self.start = start;
self.pause = pause;
/*
* Init
*/
init();
return self;
}
module.exports = Delay;