Bir işlev içinde dinleyicileri ayarlamaya çalışırken bir hata alıyorum. Bunun için çalıştığı başka bir kodu inceledim, ancak amacım için işe yaramayacak gibi görünmüyor.Node.JS EventEmitter Dinleyicisi Fonksiyonu Olmalıdır
Bu, benim yapmaya çalıştığım şeyin basitleştirilmiş bir sürümüdür.
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 işlevini çalıştırmak için alamıyorum. Dinleyiciye _getQueue() öğesini koyduğumda, işlevi çalıştıracak, ancak bir hata atar (TypeError: dinleyici bir işlev olmalıdır). Çalıştığım şekilde yazılmış başka bir kod gördüğümden, yanlış yaptığımdan emin değilim.
This.on ('newListener'...) Ile birlikte dinleyici kurulumunu yaptığımı doğruladım. Emitörün ismini değiştirirken dinleyicide adı değiştirirken, işlevi çağırmak için onu alabildiğimi düşünüyorum.
Bu ticketGenerator işlevinin, kullanarak başka bir dosyadan çağrıldığını unutmayın. Bunun bu sorunun çözümünü etkileyip etkilemeyeceğini bilmiyorum, ancak detayın önemli olabileceğini düşündüm.
--------------- DÜZENLEME ---------------- Bunu yayınladıktan sonra bunu anladım. Bu olayların yapılabilmesi için bir kurucu çağırmam gerekiyordu. Kod aşağıdaki gibi görünüyor.
events.EventEmitter.call(this);
Yetkisine bağlı olarak kendi sorumu yanıtlayamadım, ancak yapabileceğim zaman yanıt alanını güncelleyeceğim.
'Yeni' ile ticketGenerator'ı mı arıyorsunuz? Kodunuzun EventEmitter'den devralması nerede? Ayrıca setTimeout'unuzda 'new' yoktur, yani' this' değeriniz istediğiniz gibi değildir. –
Olayı çıldırmadan önce mi yayıyorsunuz biliyor musunuz? – Bergi
Yaygın bir hata. Olay Vericisini kullanmamadan birkaç ay sonra bunu yapıyorum. – EhevuTov