首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventEmitter继承问题

EventEmitter继承问题
EN

Stack Overflow用户
提问于 2015-11-28 18:57:44
回答 1查看 115关注 0票数 0

我在使用模块模式时遇到了一个小问题。我试图将一个eventemitter附加到我的库中,但它似乎不起作用,我得到了:

代码语言:javascript
复制
cmd.on('message',function(msg){
    ^
TypeError: undefined is not a function

我的库如下所示:

代码语言:javascript
复制
var util = require('util');
var EventEmitter = require("events").EventEmitter;

var TestLib = function() {
    var self = this;

    function sendRandom(cb){
        self.emit('message','whatever');
        cb(null,0);
    }

    return {
        init: function(cb) {
            console.log('init');
            cb(null);
        },

        run: function(params,cb){
            console.log('running ',params);
            sendRandom(function(err,res){
                 if(err){
                     cb(new Error(err));
                 }else{
                    cb(null,res);
                 }
            });
        },

        close: function(cb) {}
    };
};

util.inherits(TestLib, EventEmitter);
module.exports = TestLib;

我这样称呼它:

代码语言:javascript
复制
var cmd = require(__dirname+'/bin/testlib.js')();
cmd.on('message',function(msg){
    log(msg);
});
cmd.init(function(err){
    if(err){
        log(err);
    }else{
        cmd.run(line,function(err,res){
            if(err){
                log(err);
            }else{
                log(res);
            }
        });
    }
});

我确信我忽略了一些简单的东西,但是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2015-11-28 22:38:23

看看下面的例子是否对你有帮助。

testLib.js

代码语言:javascript
复制
var EventEmitter = require('events').EventEmitter;
var util = require('util');

function TestLib(ms) {
  var self = this;
  EventEmitter.call(this);

  this.random = function() {
    //emitting 'random' event randomly
    var ms = Math.random() * 100000 % 3000;
    console.log('emitting random event in ' + ms + ' milliseconds');
    setTimeout(function() {
      self.emit('random', ms);
      self.random();
    }, ms);
    return self;
  }
}

util.inherits(TestLib, EventEmitter);
module.exports = TestLib;

test.js

代码语言:javascript
复制
var TestLib = require('./testLib');

new TestLib()
  .random()
  .on('random', function(ms) {
    console.log('random event emitted after ' + ms + ' milliseconds');
  });

要运行它,请执行node test.js

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33970517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档