Я получаю сообщение об ошибке при попытке настроить слушателей внутри функции. Я рассмотрел другой код, для которого это работает, но не может заставить его работать для моих целей.Node.JS Слушатель EventEmitter должен быть функцией
Это упрощенная версия того, что я пытаюсь сделать.
var ticketGenerator = function(){
var self = this;
console.log('ticket generator');
var rows = "";
this.emit("getQueue")
var _getQueue = function(){
console.log('Getting Queue');
var connection = mysql.createConnection({
//Connection Data
});
connection.connect();
connection.query("SELECT * FROM `queue` WHERE `run` = 0 ORDER BY `queueID` ASC LIMIT 1", function(err, rows, fields){
if(err){
//self.emit("error", "Unable to get data from the database.")
console.log(err);
}
else if(typeof rows[0] == "undefined"){
console.log("Waiting to run again.");
connection.end();
setTimeout(function(){ticketGenerator()}, 60000);
}
else{
console.log("Passing Ticket Data");
self.emit("newTicketData", rows);
connection.end();
}
})
};
this.on("getQueue", _getQueue);
}
Я не могу заставить его запустить функцию для _getQueue. Когда я помещаю в слушатель _getQueue(), он запускает эту функцию, но выдает ошибку (TypeError: listenener должен быть функцией). Я не уверен, что я делаю неправильно, так как видел другой код, написанный таким образом, который работает.
Я проверил, что у меня есть настройки слушателей с this.on ('newListener' ...). Я предполагаю, что, поскольку я могу заставить его вызвать функцию при изменении имени на слушателе, что эмиттер делает это тоже.
Обратите внимание, что эта функция Tickener-кода вызывается из другого файла, используя требуемые. Я не знаю, повлияет ли это на решение этой проблемы, но подумал, что детали могут быть важными.
--------------- EDIT ---------------- Я закончил тем, что понял это после того, как я разместил это. Мне нужно было вызвать конструктор для этих событий. Код выглядит следующим образом.
events.EventEmitter.call(this);
Я не мог ответить на мой собственный вопрос из-за репутации, но будет обновлять область ответа, когда я могу.
Вы хотите заказать билетгенератор с 'новым'? Где ваш код действительно наследуется от EventEmitter? Также в вашем setTimeout нет 'new', поэтому ваше значение' this' не то, что вы хотите. –
Вы знаете, что вы излучаете событие, прежде чем подключаться к нему? – Bergi
Общая ошибка. Я делаю это через несколько месяцев, не используя Event Emitter. – EhevuTov