Javascript - TypeError: listener must be a function
Javascript - TypeError: listener must be a function
又一个 'listener must be a function' 错误。
我仔细检查了所有参数,检查了正确的语法等,但仍然找不到问题所在:
这是我的代码片段。
在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));
};
在 ACKPacketHandler.js:
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);
};
这是我收到的错误的屏幕截图:
https://gyazo.com/6047c5917f937aa33f29f9fc40cdf5f7
您的数据包处理函数(例如 handleDateAck()
)不是 returning 函数。事实上,他们似乎没有 returning 任何东西。 return 值是您当前用作传递给 emitter.on()
.
的侦听器函数的值
又一个 'listener must be a function' 错误。 我仔细检查了所有参数,检查了正确的语法等,但仍然找不到问题所在:
这是我的代码片段。
在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));
};
在 ACKPacketHandler.js:
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);
};
这是我收到的错误的屏幕截图: https://gyazo.com/6047c5917f937aa33f29f9fc40cdf5f7
您的数据包处理函数(例如 handleDateAck()
)不是 returning 函数。事实上,他们似乎没有 returning 任何东西。 return 值是您当前用作传递给 emitter.on()
.