[英]Javascript - TypeError: listener must be a function
Yet another 'listener must be a function' error. 另一个“侦听器必须是功能”错误。 I double checked all my parameters, checked for correct syntax etc but still can't find where the problem is:
我仔细检查了所有参数,检查语法是否正确等,但仍然找不到问题所在:
Here are my snippets of code. 这是我的代码片段。
in login.js: 在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));
in PacketSwitch.js: 在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));
}
};
let's suppose it enters case 2: in PacketHandler.js: 假设它进入情况2:在PacketHandler.js中:
exports.handleDateReq = function(data, sock) {
global.eventEmitter.createAndFireEvent('handleDateAck', global.ackHandler.handleDateAck(sock));
};
in ACKPacketHandler.js: 在ACKPacketHandler.js中:
exports.handleDateAck = function(sock) {
sock.write("Test!");
};
in EventEmitter.js: 在EventEmitter.js中:
var eventEmitter = require('events');
const myEmitter = new eventEmitter.EventEmitter();
exports.createAndFireEvent = function(event, callback) {
myEmitter.on(event, callback);
myEmitter.emit(event);
};
And here's a screenshot of the error I get: https://gyazo.com/6047c5917f937aa33f29f9fc40cdf5f7 这是我得到的错误的屏幕截图: https : //gyazo.com/6047c5917f937aa33f29f9fc40cdf5f7
Your packet handler functions (eg handleDateAck()
) are not returning functions. 您的数据包处理程序函数(例如
handleDateAck()
)不是返回函数。 In fact, they don't seem to be returning anything. 实际上,他们似乎并没有返回任何东西。 The return value is what you're currently using as the listener function passed to
emitter.on()
. 返回值是您当前用作传递给
emitter.on()
的侦听器函数的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.