事件没有被发射或​​他们没有被捕获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的事情,我可以很快看到的是:

  1. 你是路过这是没有定义的错误if(__error(error))
  2. 您调用回调函数范围this.emit,它是指向db.query而不是EventEmitter

你必须绑定this到您的回调。 执行以下操作将适用于您db.query('select something', callback.bind(this)); 但您还必须解决第一个提到的“错误”。

+0

感谢您的答复.. 问题是与此指针..现在它的工作正常 –

+0

检查以下链接的深度信息关于'这个' https://github.com/getify/You-Dont-Know-JS/blob/master/this%20& %20object%20prototypes/README.md#you-dont-know-js-this - object-prototypes –

在您的大部分代码中,您在错误的上下文中使用关键字this。与function关键字声明的每个函数,都有自己的this背景,所以当内部__error例如this你指的是不是LoadFunthis,所以它是不是因此延长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

感谢您的回复..问题出在这个指针上。现在它的工作正常:) –