0

我不确定为什么这不起作用。有人可以给我线索吗?我没有看到任何事件被记录下来,但它们确实得到emitted了……嗯,我想:)

{EventEmitter} = require 'events'

class Base extends EventEmitter

class App extends Base

  constructor: (cb) ->

    console.log 'setup'

    @on 'listener:1', (data) ->
      console.log 'listener 1: ' + data

    @on 'listener:2', (data) ->
      console.log 'listener 2: ' + data

    cb()

class One extends Base

  fire: () ->

    console.log 'fire 1'

    @emit 'listener:1', 1

class Two extends Base

  fire: () ->

    console.log 'fire 2'

    @emit 'listener:2', 2

new App(
  () ->
    setTimeout (->
      one = new One()
      one.fire()
      setTimeout (->
        two = new Two()
        two.fire()
      ), 2000
    ), 2000
)
4

1 回答 1

1

程序的输出符合预期;仅App在其自身上设置侦听器,但它从不做emit任何事情(只有Oneand Two,它们不是的子类App,这样做)。也许您正在寻找更像以下的东西?

{EventEmitter} = require 'events'

class Base extends EventEmitter
  constructor: ->
    console.log 'setup'

    @on 'listener:1', (data) ->
      console.log 'listener 1: ' + data

    @on 'listener:2', (data) ->
      console.log 'listener 2: ' + data

class App extends Base
  constructor: (cb) ->
    super()
    cb()

class One extends Base
  fire: ->
    console.log 'fire 1'
    @emit 'listener:1', 1

class Two extends Base
  fire: ->
    console.log 'fire 2'
    @emit 'listener:2', 2

new App(
  ->
    setTimeout (->
      one = new One()
      one.fire()
      setTimeout (->
        two = new Two()
        two.fire()
      ), 2000
    ), 2000
)
于 2013-01-16T04:35:30.647 回答