Anonymous posting setup in src
[KisSync.git] / src / asyncqueue.js
blob3f15c54eaa6cc4aa11eec510a5622e12efcd8580
1 var AsyncQueue = function () {
2     this._q = [];
3     this._lock = false;
4     this._tm = 0;
5 };
7 AsyncQueue.prototype.next = function () {
8     if (this._q.length > 0) {
9         if (!this.lock())
10             return;
11         var item = this._q.shift();
12         var fn = item[0];
13         this._tm = Date.now() + item[1];
14         fn(this);
15     }
18 AsyncQueue.prototype.lock = function () {
19     if (this._lock) {
20         if (this._tm > 0 && Date.now() > this._tm) {
21             this._tm = 0;
22             return true;
23         }
24         return false;
25     }
27     this._lock = true;
28     return true;
31 AsyncQueue.prototype.release = function () {
32     var self = this;
33     if (!self._lock)
34         return false;
36     self._lock = false;
37     setImmediate(function () {
38         self.next();
39     });
40     return true;
43 AsyncQueue.prototype.queue = function (fn) {
44     var self = this;
45     self._q.push([fn, 20000]);
46     self.next();
49 AsyncQueue.prototype.reset = function () {
50     this._q = [];
51     this._lock = false;
54 module.exports = AsyncQueue;