大多数 Node.js 核心 API 构建于惯用的异步事件驱动架构,其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。
先看下event(事件)如何使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const Emitter = require("events");
const emitter = new Emitter();
emitter.on("event", function () { console.log("an event occur"); });
emitter.on("event1", function () { console.log("an event1 occur"); });
emitter.emit("event"); emitter.emit("event1");
|
上面我们绑定了两个事件分别为event
和event1
,然后通过emit
分别触发了这两个事件
运行结果如下
1 2
| an event occur an event1 occur
|
事件触发了,那么如何能在触发事件的时候传递参数,看下面的代码
1 2 3 4 5 6 7 8 9 10 11 12
| const Emitter = require("events");
const emitter = new Emitter();
emitter.on("run", function (name, distance) { console.log(`【${name}】跑了${distance}米`);
console.log(this); console.log(this === emitter); });
emitter.emit("run", "xiaowang", 20);
|
输出结果如下
1 2 3 4 5 6
| 【xiaowang】跑了20米 EventEmitter { _events: [Object: null prototype] { run: [Function] }, _eventsCount: 1, _maxListeners: undefined } true
|
在这里不建议使用 ES6 Arrow Functions
1 2 3 4 5 6 7 8 9 10 11 12
| const Emitter = require("events");
const emitter = new Emitter();
emitter.on("run", (name, distance) => { console.log(`【${name}】跑了${distance}米`);
console.log(this); console.log(this === emitter); });
emitter.emit("run", "xiaowang", 20);
|
运行结果如下
1 2 3
| 【xiaowang】跑了20米 {} false
|