Я новичок здесь, я пытаюсь написать код, который используется эмиттер узел события в нем, см ниже код,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 Спасибо заранее.
hi mscdex, спасибо за ввод, я решил его, вызывая из самого конструктора, как и ниже, setTimeout (функция ({self.emit ('error', errors.options_not_passed);}, 0); Практика? – Sathish
Не совсем. Общим способом борьбы с этими непосредственными ошибками является выброс экземпляра ошибки (например, 'throw errors.options_not_passed'). Просто убедитесь, что все, что вы бросаете, является фактическим экземпляром Error, а не просто строкой. – mscdex