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

 

 

 

 

 

 

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