Estoy tratando de escribir una aplicación de sondeo simple, utilizando node.js. Quiero escribir un EventEmitter que realice una acción en un temporizador y emita eventos en función del resultado de esa acción periódica.node.js, método de devolución de llamada setTimeout y "this"
Estoy empezando por crear mi propio objeto y heredar de EventEmitter. Inicié un temporizador, usando setInterval, y especifico el método para llamar después de que el temporizador haya transcurrido. Dentro del método de devolución de llamada del temporizador, quiero hacer referencia a una variable del objeto que he creado, pero el this
no parece referirse al objeto.
¿Cómo puedo hacer referencia a mi variable en este método? Aquí está mi código:
var util = require('util'),
events = require('events'),
timers = require('timers'),
redis = require('redis');
// define worker object
var JobPoller = function() {
// inherit event emitter
events.EventEmitter.call(this);
// save reference to database
this.db = redis.createClient();
// start main loop
this.interval_id = timers.setTimeout(this.check, 1000);
};
JobPoller.prototype.check = function() {
// pop a job off the queue if possible
this.db.rpop('pdf-job-queue', function (err, result) {
if (err != null)
this.emit('error', err);
if (result != null)
this.emit('job', JSON.parse(result));
// check for more jobs
this.interval_id = timers.setTimeout(this.check, 1000);
});
};
// inhert from event emitter
util.inherits(JobPoller, events.EventEmitter);
// export the poller instance
module.exports = new JobPoller;