1234567891011121314151617181920212223242526272829303132333435363738394041 |
- var exp = module.exports;
- /**
- * Count down to zero and invoke cb finally.
- */
- var CountDownLatch = function(count, cb) {
- this.count = count;
- this.cb = cb;
- };
- /**
- * Call when a task finish to count down.
- *
- * @api public
- */
- CountDownLatch.prototype.done = function() {
- if(this.count <= 0) {
- throw new Error('illegal state.');
- }
- this.count--;
- if (this.count === 0) {
- this.cb();
- }
- };
- /**
- * create a count down latch
- *
- * @api public
- */
- exp.createCountDownLatch = function(count, cb) {
- if(!count || count <= 0) {
- throw new Error('count should be positive.');
- }
- if(typeof cb !== 'function') {
- throw new Error('cb should be a function.');
- }
- return new CountDownLatch(count, cb);
- };
|