2016-08-11 2 views
0

Еще одна ошибка «слушатель должна быть функцией». Я дважды проверял все мои параметры, проверял правильность синтаксиса и т. Д., Но до сих пор не могу найти, где проблема:Javascript - TypeError: слушатель должен быть функцией

Вот мои фрагменты кода.

в 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

+0

Что касается событий.js line 130? – Craicerjack

+0

events.js line 130 не является частью моего кода, но это модуль по умолчанию Node.js. – ProTheJoker

ответ

2

Ваши пакетные функции обработчика (например, handleDateAck()) не возвращение функции. На самом деле они ничего не возвращают. Возвращаемое значение - это то, что вы в настоящее время используете в качестве функции слушателя, переданной в emitter.on().

+0

Также 'handleLoginReq()'. – evolutionxbox

+0

поэтому я должен добавить что-то вроде функции возврата() {..} "? – ProTheJoker

+0

Либо это, либо реструктурируйте свою логику, чтобы обеспечить обратный вызов по-другому, в зависимости от ваших потребностей, конечно. – mscdex

Смежные вопросы