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;