JavaScript - 类型错误 : listener must be a function

标签 javascript node.js listener eventemitter

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

这是我的代码片段。

在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())不是返回函数。事实上,他们似乎没有返回任何东西。返回值是您当前用作传递给 emitter.on() 的监听器函数的值。

关于JavaScript - 类型错误 : listener must be a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38891698/

相关文章:

javascript - 如何使用 Vue 构建动态 CSS 网格?

node.js - Meteor MongoDB 订阅以 10 秒的间隔而不是实时传递数据

android - Android 的图像缩放 Activity

javascript - 如何使用 jQuery 系统地更改 Twitter.com 上所有头像图像的 src 属性?

javascript - Pixi.js 无法加载图像,因为 Django "can' 找不到它们”

javascript - 重复模板

node.js - 具有 Mongoose 模式的关联数组?

android - 如何在ListView内的ImageView中设置OnClickListener?

javascript - 您可以在 Android Chrome 上为 matchMedia 添加一个 javascript 回调监听器吗?

javascript - puppeteer 表演时间表?