我正在尝试编写一个虚假的下载器,它基本上会睡一段时间并发出'下载'事件。我还希望有我自己的变量来跟踪发出的事件数量。 这段代码抛出以下错误:
<
代码:
ReferenceError: this is not defined
如果我评论 this.totalEmitted ,那么它可以正常工作。
更新
当我完全消除构造函数时,它开始正常工作。
即使使用空构造函数也会导致此参考错误。
我不确定节点4.4.5中是否支持构造函数。
解决方法:
'use strict';
const EventEmitter = require('events');
class Downloader extends EventEmitter{
constructor(){
this.totalEmitted = 0;
}
download(delaySecs){
setTimeout(() => {
this.emit('downloaded',delaySecs);
this.totalEmitted ++;
},delaySecs*1000)
}
}
module.exports = Downloader;
答案 0 :(得分:0)
如果它没有打扰你从ES6 Class切换到函数,那么你可以尝试:
'use strict';
const util = require('util');
const EventEmitter = require('events');
function Downloader() {
var self = this;
self.totalEmitted = 0;
this.on('downloaded', function() {
self.totalEmitted ++;
console.log(self.totalEmitted);
});
}
util.inherits(Downloader, EventEmitter);
Downloader.prototype.download = function(delaySecs) {
setTimeout(() => {
this.emit('downloaded', delaySecs);
}, delaySecs*1000);
};
var downloader = new Downloader();
downloader.download(1);
module.exports = Downloader;