You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					29 lines
				
				570 B
			
		
		
			
		
	
	
					29 lines
				
				570 B
			| 
											3 years ago
										 | var EventEmitter = require('events').EventEmitter | ||
|  | 
 | ||
|  | function Counter () { | ||
|  |   EventEmitter.call(this) | ||
|  |   this.value = 0 | ||
|  | } | ||
|  | 
 | ||
|  | Counter.prototype = Object.create(EventEmitter.prototype) | ||
|  | 
 | ||
|  | Counter.prototype.increment = function increment () { | ||
|  |   this.value++ | ||
|  | } | ||
|  | 
 | ||
|  | Counter.prototype.decrement = function decrement () { | ||
|  |   if (--this.value === 0) this.emit('zero') | ||
|  | } | ||
|  | 
 | ||
|  | Counter.prototype.isZero = function isZero () { | ||
|  |   return (this.value === 0) | ||
|  | } | ||
|  | 
 | ||
|  | Counter.prototype.onceZero = function onceZero (fn) { | ||
|  |   if (this.isZero()) return fn() | ||
|  | 
 | ||
|  |   this.once('zero', fn) | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = Counter |