29 lines
		
	
	
		
			570 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			29 lines
		
	
	
		
			570 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 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 |