我是新手,我正在尝试编写代码,其中使用了节点的事件发射器,请参阅下面的代码,
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);
})
但它抛出了这个错误,我不知道我做错了什么,
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"
};
可能有人,给我一些输入,我在这里做错了吗?
对于上面的内容,我知道在为someapi类创建对象时我没有传递选项对象。我想知道为什么我的错误没有在&#34; on&#34;事件
P.S提前致谢。
答案 0 :(得分:1)
原因是您从构造函数发出错误。在创建实例的时候无法连接侦听器(或对对象执行任何其他操作)(因为您没有对从中返回的新对象的引用) new someapi()
。)