写点什么

【Node.js】事件触发器 - 基础篇

用户头像
学习委员
关注
发布于: 2021 年 01 月 30 日
【Node.js】事件触发器 - 基础篇

node 想要触发一个事件,可不像前端开发那样有 onclick 等事件可以触发。

1、引入 events 事件模块


node 中,触发事件前,需要先通 require 引入事件模块

var events = require('events');
复制代码

这样就把事件模块引入,并赋给变量 events 了。


2、创建 EventEmitter 对象

var myEmitter = new events.EventEmitter();
复制代码

通过 new 关键字,创建 EventEmitter 对象,并赋给变量 myEmitter


3、注册事件

myEmitter.on('rabbit', function(msg="I\'m Rabbit") {  console.log(msg);});
复制代码

通过 on 关键字,注册一个名叫 rabbit 的事件,该事件接受一个参数。这里用了 ES6 的写法,如果没参数传过来,msg 的值就是 I'm Rabbit


4、触发事件

myEmitter.emit('rabbit');myEmitter.emit('rabbit', "Hello Rabbit~");
复制代码

通过 emit 关键字,触发已写好的事件。


输出结果



可以看到 Terminal 输出两行。

第一行没传參,所以输出默认值。

第二行传參,所以输出参数值。



下面的代码是同步执行的。

var events = require('events');var myEmitter = new events.EventEmitter();
myEmitter.on('rabbit', function(msg="I\'m Rabbit") { console.log(msg);});
myEmitter.emit("Hello Rabbit~");
console.log('hello node!');
复制代码


能清晰看到,“hello node!”这句是最后才执行的。


如果希望这些事件是异步执行的,就是执行 rabbit 事件的同时也执行其后的代码的话,可以通过 setImmediate 这个方法。

var events = require('events');var myEmitter = new events.EventEmitter();
myEmitter.on('rabbit', function(msg="I\'m Rabbit") { setImmediate(function() { console.log(msg); })});
myEmitter.emit("Hello Rabbit~");
console.log('hello node!');
复制代码



因为执行 rabbit 事件是需要一点时间的(虽然这时间对于人来说可以忽略不计),但执行最后的 console.log 会更快,所以这里的输出顺序会有所变化。


用户头像

学习委员

关注

反派 2019.03.19 加入

哈哈哈哈哈哈哈哈哈哈哈哈哈哈

评论

发布
暂无评论
【Node.js】事件触发器 - 基础篇