简体   繁体   English

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

[英]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.

相关问题 类型错误:监听器必须是一个函数 - TypeError: listener must be a function TypeError('"listener" 参数必须是一个函数'); - TypeError('"listener" argument must be a function'); 回调异常[TypeError:侦听器必须是一个函数] - Callback exception [TypeError: listener must be a function] 猫鼬:连接时出现“ TypeError:“ listener”参数必须是一个函数” - Mongoose: “TypeError: ”listener“ argument must be a function” on connect Gulpfile.js:如何修复“ TypeError:“ listener”参数必须是一个函数”? - Gulpfile.js : How to fix “TypeError: ”listener“ argument must be a function”? Discord.js-TypeError:“ listener”参数必须是一个函数 - Discord.js - TypeError: “listener” argument must be a function 套接字io实现,获取TypeError('“ listener”参数必须是一个函数') - Socket io implementation, Getting TypeError('“listener” argument must be a function') 监听器必须是一个功能 - listener must be a function 调用事件侦听器时 Javascript “未捕获的类型错误:object 不是函数” - Javascript “Uncaught TypeError: object is not a function” when calling event listener Javascript添加侦听器错误:TypeError:trigger.addEventListener不是函数 - Javascript add Listener error: TypeError: trigger.addEventListener is not a function
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM