6
我正在嘗試使用node.js編寫一個簡單的輪詢應用程序。我想編寫一個EventEmitter,它對定時器執行一個動作,並根據該定期動作的結果發出事件。node.js,setTimeout回調方法和「this」
我開始創建自己的對象並繼承EventEmitter。我使用setInterval啓動計時器,並在計時器過去後指定要調用的方法。在定時器回調方法中,我想引用已創建的對象的變量,但this
似乎沒有引用該對象。
如何在此方法中引用我的變量?這裏是我的代碼:
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;