事件没有被发射或他们没有被捕获nodejs
问题描述:
我不知道我的代码有什么问题。事件没有被发射或他们没有被捕获nodejs
// emitter.js
var EventEmitter = require('events').EventEmitter;
var util = require('util');
function Loadfun(param1, param2, db){
function __error(error, row){
if(error){
this.emit('error', error);
return true;
}
if(row.length < 1)
this.emit('failure');
}
function doSomething(){
db.query('select something', callback);
}
function callback(err, result){
if(__error(error))
return false;
else
this.emit('success', result);
}
this.doSomething = doSomething;
};
util.inherits(Loadfun,EventEmitter);
module.exports = Loadfun;
这是发射器功能。 和我使用这个一些同步数据库的作品。 以下是调用函数。
var emitter = require('emitter');
router('/fetch', function(req, res){
var fetch = new emitter(param1, param2, db);
fetch.on('failure', function(){
console.log('error');
});
fetch.on('success', function(data){
console.log(JSON.stringify(data));
});
fetch.doSomething();
});
这工作完好,没有任何错误。 我试图记录流量,直到放射成功 但捕获的事件发射没有被记录.. 我不明白是什么问题..这将是很好,如果有人可以帮助。
答
2的事情,我可以很快看到的是:
- 你是路过这是没有定义的错误
if(__error(error))
。 - 您调用回调函数范围
this.emit
,它是指向db.query
而不是EventEmitter
你必须绑定this
到您的回调。 执行以下操作将适用于您db.query('select something', callback.bind(this));
但您还必须解决第一个提到的“错误”。
答
在您的大部分代码中,您在错误的上下文中使用关键字this
。与function
关键字声明的每个函数,都有自己的this
背景,所以当内部__error
例如this
你指的是不是LoadFun
this
,所以它是不是因此延长EventEmitter
类不排放任何类。
您可以拨打电话时将它们绑定你的功能,或使用箭头功能,或分配给另一个变量,例如与此分配给另一个变量:
function Loadfun(param1, param2, db){
var self = this;
function __error(error, row){
if(error){
self.emit('error', error);
return true;
}
if(row.length < 1)
self.emit('failure');
}
function doSomething(){
db.query('select something', callback);
}
function callback(err, result){
if(__error(err))
return false;
else
self.emit('success', result);
}
self.doSomething = doSomething;
};
+0
感谢您的回复..问题出在这个指针上。现在它的工作正常:) –
感谢您的答复.. 问题是与此指针..现在它的工作正常 –
检查以下链接的深度信息关于'这个' https://github.com/getify/You-Dont-Know-JS/blob/master/this%20& %20object%20prototypes/README.md#you-dont-know-js-this - object-prototypes –