gx
chenyc
2025-02-12 ea42ff3ebee1eeb3fb29423aa848a249441db81c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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