2015-01-15 2 views
-2

Я новичок здесь, я пытаюсь написать код, который используется эмиттер узел события в нем, см ниже код,Node JS Unhandler Event Error

var EventEmitter = require('events').EventEmitter; 
var errors = require('./errors'); 

var defaults ={ 
    default_api_endpoint_v0 : "someapi", 
    oauth_c_key: "oauth_consumer_key", 
    options_check: ['oauth_consumer_key'] 
}; 

var someapi = function(options){ 
    this.options = options; 
    EventEmitter.call(this); 
    if(!this.options) 
     this.emit('error',errors.options_not_passed); 
     return; 
     //return errors.options_not_passed 
    if(!this.checkOptions()){ 
     return errors.options_passed_not_satisfied 
    } 

}; 

someapi.prototype = Object.create(EventEmitter.prototype); 

someapi.prototype.checkOptions = function(){ 
    var thatOptions = this.options; 
    var bool = false; 
    if(typeof thatOptions !== 'object') 
     return errors.options_passed_not_satisfied; 
    Object.keys(thatOptions).forEach(function(key){ 
     Object.keys(defaults.options_check).forEach(function(Key){ 
      if(key === defaults.options_check[Key]){ 
       bool = true; 
      } 
     }) 
    }); 
    return bool; 
}; 

module.exports = someapi 

и я ссылающегося на него, как это ниже ,

var op = new someapi(); 

op.on('error',function(err){ 
    console.log("Emitted" + err); 
}) 

Но он бросает эту ошибку, я не знаю, что ıA делает неправильно,

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: Please pass the options          
    at Object.<anonymous> (d:\gitHub\someapi\lib\errors.js:2:26) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object.<anonymous> (d:\gitHub\someapi\lib\api.js:2:14) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 

В тха выше ошибки, Пожалуйста, передайте опции возвращается мне, он находится в файле ошибок см ниже,

module.exports = { 
    options_not_passed : new Error("Please pass the options"), 
    options_passed_not_satisfied : "Please check are you sending all the options_params" 
}; 

Может кто-нибудь, предоставить мне несколько входов, что я здесь делаю неправильно ???

И выше, я знаю, что я не передаю объект options при создании объекта в класс someapi. Я хочу знать, почему моя ошибка не обрабатывается в событии «on».

P.S Спасибо заранее.

ответ

1

Причина в том, что вы испускаете ошибку от конструктора. Невозможно подключить слушателя (или сделать что-нибудь еще с объектом) , а экземпляр создается (потому что у вас нет ссылки на новый объект, который возвращается с new someapi()).

+0

hi mscdex, спасибо за ввод, я решил его, вызывая из самого конструктора, как и ниже, setTimeout (функция ({self.emit ('error', errors.options_not_passed);}, 0); Практика? – Sathish

+0

Не совсем. Общим способом борьбы с этими непосредственными ошибками является выброс экземпляра ошибки (например, 'throw errors.options_not_passed'). Просто убедитесь, что все, что вы бросаете, является фактическим экземпляром Error, а не просто строкой. – mscdex