我在 CoffeeScript/NodeJS 中看到一些关于 EventEmitters 和处理程序的非常奇怪的行为。我已经整理了一个小样本来展示这个问题......
本质上,我的事件处理有一些间接性,但除非我将第一个事件处理程序包装在 lambda 中,否则我似乎无法让它工作,我想了解为什么/如果有什么我可以做的事情来完成这项工作. test1()以我的思维方式,基本上下面应该具有与test3(). test2()包括在内只是为了表明第二级事件处理有效!
events = require "events"
class ExampleEmitter extends events.EventEmitter
    constructor: () ->
    go1: () -> 
        console.log("fire 1")
        @emit("test1", "there")
    go2: () -> 
        console.log("fire 2")
        @emit("test2", "there")
class ExampleHandler
    constructor: () ->
    handle: (x) -> console.log("hey", x)
test1 = () ->        
    handler  = new ExampleHandler()
    emitter1 = new ExampleEmitter()
    emitter2 = new ExampleEmitter()
    emitter1.on "test1", emitter2.go2
    emitter2.on "test2", handler.handle #this doesn't fire :(
    emitter1.go1()
test2 = () ->        
    handler  = new ExampleHandler()
    emitter1 = new ExampleEmitter()
    emitter2 = new ExampleEmitter()
    emitter1.on "test1", emitter2.go2
    emitter2.on "test2", handler.handle
    emitter2.go2()
test3 = () ->        
    handler  = new ExampleHandler()
    emitter1 = new ExampleEmitter()
    emitter2 = new ExampleEmitter()
    emitter1.on "test1", () -> emitter2.go2() #why must I wrap this?
    emitter2.on "test2", handler.handle
    emitter1.go1()
console.log "\ntest1"
test1()
console.log "\ntest2"
test2()
console.log "\ntest3"
test3()
这是输出:
test1
fire 1
fire 2
test2
fire 2
hey there
test3
fire 1
fire 2
hey there