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何もしません(OneTwo、のサブクラスではありません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 に答える