Javascript-TypeError:侦听器必须是函数

Javascript-TypeError:侦听器必须是函数,javascript,node.js,listener,eventemitter,Javascript,Node.js,Listener,Eventemitter,还有一个“侦听器必须是函数”错误。 我仔细检查了所有参数,检查了语法是否正确等,但仍然找不到问题所在: 下面是我的代码片段 在login.js中: global.eventEmitter = require('./helpers/EventEmitter.js'); var packetSwitch = require('./handlers/PacketSwitch.js'); global.ackHandler = require('./handlers/ACKPacketHandler.j

还有一个“侦听器必须是函数”错误。 我仔细检查了所有参数,检查了语法是否正确等,但仍然找不到问题所在:

下面是我的代码片段

在login.js中:

global.eventEmitter = require('./helpers/EventEmitter.js');
var packetSwitch = require('./handlers/PacketSwitch.js');
global.ackHandler = require('./handlers/ACKPacketHandler.js');
...
global.eventEmitter.createAndFireEvent('opCodeReceived',packetSwitch.switch(opcode, decrypted, sock));
在PacketSwitch.js中:

var packetHandler = require('./PacketHandler.js');
exports.switch = function(opcode, data, sock) {
    switch (opcode) {
        case 1:
            eventEmitter.createAndFireEvent('reqLoginReceived', packetHandler.handleLoginReq(data, sock));
            break;
        case 2:
            eventEmitter.createAndFireEvent('reqDateReceived', packetHandler.handleDateReq(data, sock));
            break;
        default:
            eventEmitter.createAndFireEvent('unknownReceived', packetHandler.handleUnknown(data, sock));
    }
};
让我们假设它进入案例2: 在PacketHandler.js中:

exports.handleDateReq = function(data, sock) {
    global.eventEmitter.createAndFireEvent('handleDateAck', global.ackHandler.handleDateAck(sock));
};
exports.handleDateAck = function(sock) {
    sock.write("Test!");
};
在ACKPacketHandler.js中:

exports.handleDateReq = function(data, sock) {
    global.eventEmitter.createAndFireEvent('handleDateAck', global.ackHandler.handleDateAck(sock));
};
exports.handleDateAck = function(sock) {
    sock.write("Test!");
};
在EventEmitter.js中:

var eventEmitter = require('events');
const myEmitter = new eventEmitter.EventEmitter();

exports.createAndFireEvent = function(event, callback) {
    myEmitter.on(event, callback);
    myEmitter.emit(event);
};
下面是我得到的错误截图:

您的数据包处理程序函数(例如
handleDateAck()
)不是返回函数。事实上,他们似乎没有归还任何东西。返回值是您当前用作传递给
发射器的侦听器函数的值。on()

您的数据包处理程序函数(例如
handleDateAck()
)不是返回函数。事实上,他们似乎没有归还任何东西。返回值是当前用作传递给
emitter.on()

events.js第130行上的内容?events.js第130行不是我的代码的一部分,但它是Node.js的默认模块。events.js第130行上的内容?events.js第130行不是我的代码的一部分,但是它是Node.js的默认模块。也是
handleLoginReq()
。所以我应该添加类似“return function(){..}”的内容。当然,也可以根据您的需要重新构造您的逻辑,以不同的方式提供回调。通过将逻辑放入return function(){logic}括号中来解决此问题。^^非常感谢!还有
handleLoginReq()
。因此我应该添加类似“return function(){..}”的内容。当然,也可以根据您的需要,重新构造您的逻辑以提供不同的回调方式。将逻辑放入return function(){logic}括号中^!