Node.js后端开发 - 基础篇 #5 事件

文章目录

一、一个简单的事件演示

二、比较真实一点的事件例子

三、nodejs事件总结


上一篇文章我们介绍了nodejs的模块、module.exports 关键字暴露内容、require关键字请求内容以及他们的多种写法,详见: Node.js后端开发 - 基础篇 #4 模块 这篇文章我们将介绍nodejs的事件,nodejs本来就是基于事件驱动的,事件是nodejs的核心,所以我们要重点好好了解学习。

一、一个简单的事件演示

我们可以在app.js里面写入以下代码:


//这个require('events')你在当前目录的模块文件是找不到的,因为这是nodejs的核心库,
//所以它可以这样直接使用,其中events它是事件的一个库。 
var events = require('events');

//新增一个事件对象
var myEmitter = new events.EventEmitter;

//然后我们要为新增的事件,绑定一个监听的函数on
//参数1:'someEvent' 为事件的名称
//参数2:事件发生后回调的函数 
myEmitter.on('someEvent',function (message) {
    console.log(message);
})

//那么怎么来触发呢? 我们可以手动用代码来触发
//参数1:事件名称。
//参数2:传入参数内容,它对应函数的message参数
myEmitter.emit('someEvent', 'the event was emitted');

然后我们来看一看输出结果:

bogon:hello-nodejs luminal$ node app
the event was emitted
bogon:hello-nodejs luminal$ 

二、比较真实一点的事件例子

基于上面的例子代码,我们改改来看看一个比较真实一点的例子,代码如下:


var events = require('events');
//这个库是一个工具库,里面包含了很多工具,它也是nodejs的核心库之一
//我们可参考api:https://nodejs.org/dist/latest-v9.x/docs/api/util.html
var util = require('util');

// 定义一个Person类,这是javaScript的写法
var Person = function(name) {
    this.name = name;
}

//然后我们调用工具库里面的函数inherits
//让 Person类 继承 events.EventEmitter 事件类
util.inherits(Person, events.EventEmitter);

//新建三个Person对象
var xiaoming = new Person('xiaoming');
var xiaohua = new Person('xiaohua');
var xiaobai = new Person('xiaobai');

// 把三个Person对象 放到 数组中
var person = [xiaoming,xiaohua,xiaobai];

// forEach 循环 person数组,
// 为每个Person对象,依次绑定一个监听的函数on
person.forEach(function(person) {
    person.on('speak',function(message) {
        console.log(person.name + "说:" + message);
    })
});

//手动用代码来触发
xiaoming.emit('speak', '123');
xiaohua.emit('speak', '456');
xiaobai.emit('speak', '789');

然后我们来看一看输出结果:

bogon:hello-nodejs luminal$ node app
xiaoming说:123
xiaohua说:456
xiaobai说:789
bogon:hello-nodejs luminal$ 

三、nodejs事件总结

因为自己做过多年的java、android开发,通过上面的例子不难发现,nodejs事件无非就是三步曲,

1、新建 或 继承 事件对象。 events.EventEmitter

2、绑定、回调。on

3、触发。emit

 

nodejs事件的几个api的链接,方便参考:

https://nodejs.org/dist/latest-v9.x/docs/api/events.html

https://nodejs.org/dist/latest-v9.x/docs/api/util.html

https://nodejs.org/dist/latest-v9.x/docs/api/util.html#util_util_inherits_constructor_superconstructor

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章