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
 |