NodeJS基礎入門-Event
阿新 • • 發佈:2018-12-10
大多數Node.js核心API都採用慣用的非同步事件驅動架構,其中某些型別的物件(觸發器)會週期性地觸發命名事件來呼叫函式物件(監聽器)。
例如,net.Server物件會在每次有新連線時觸發事件;fs.ReadStream會在檔案被開啟時觸發事件;流物件會在資料可讀時觸發事件。
所有能觸發事件的物件都是EventEmitter類的例項。eventEmitterr.on()函式,允許將一個或多個函式繫結到會被物件觸發的命名事件上。事件名稱通常是駝峰式的字串,但也可以使用任何有效的JavaScript屬性名。
當EventEmitter物件觸發一個事件時,所有繫結在該事件上的函式都被同步地呼叫。監聽器的返回值會被丟棄。
例子,一個綁定了一個監聽器的EventEmitterr例項。eventEmitter.on()方法用於註冊監聽器,eventEmitter.emit()方法用於觸發事件。
const EventEmitter = require('events');
class CustomEvent extends EventEmitter {
}
const ce = new CustomEvent();
ce.on('test', ()=>{
console.log('This is a test!')
});
setInterval(() => {
ce.emit('test')
},500);
不停的觸發這個事件:
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
This is a test!
^C
Error錯誤資訊列印
const EventEmitter = require('events');
class CustomEvent extends EventEmitter {
}
const ce = new CustomEvent();
ce.on('error', err =>{
console.log(err)
});
ce.emit('error',new Error('oops!'));
Error: oops!
at Object.
監聽並觸發結果,只調用一次
const EventEmitter = require('events'); class CustomEvent extends EventEmitter { } // 只調用一次 const ce = new CustomEvent(); ce.once('test', () =>{ console.log('test event'); }); setInterval(() => { ce.emit('test') }, 500);
test event
移除事件:
class CustomEvent extends EventEmitter {}
function fn1() {
console.log('fn1');
}
function fn2() {
console.log('fn2')
}
const ce = new CustomEvent();
ce.on('test', fn1); //可以繫結多個方法
ce.on('test', fn2);
setInterval(() => {
ce.emit('test');
},500);
setTimeout(() => {
// ce.removeListener('test',fn2); //移除fn2
ce.removeAllListeners('test'); //移除所有事件
}, 2000);
fn1
fn2
fn1
fn2
fn1
fn2
^C