天天看點

08慕課網《進擊Node.js基礎(一)》事件events

引用events子產品中的EventEmitter 

事件的監聽和發射

相同的事件發射數量有限,可以通過setMaxListeners設定峰值

var EventEmitter = require('events').EventEmitter

var life = new EventEmitter()
//加不加都沒有報警告
//life.setMaxListeners(10)

life.on('clickEvent',function(who){
    console.log('給' + who + ' 倒水')
})

life.emit('clickEvent','漢子1')

      
08慕課網《進擊Node.js基礎(一)》事件events

每個emit都有傳回值,表示是否有相應的監聽事件

var hasClickListener = life.emit('clickEvent','漢子12')
var hasChangeListener = life.emit('changeEvent','妹子1')

 console.log(hasClickListener)
 console.log(hasChangeListener)
 console.log(hasPutListener)      

 取消監聽

//可以放到 on 和 emit 後面
function water(who){
    console.log('給 ' + who + ' 倒水')
}

life.on('changeEvent',water)
//還沒有被取消,emit不能放到 on之前
life.emit('changeEvent','張三')
//water不可以用匿名函數,removeListener需要在emit之前
life.removeListener('changeEvent',water)
//移除所有監聽,可以傳遞事件名作為參數
//life.removeAllListeners()


var hasChangeListener = life.emit('changeEvent','妹子1')//監聽被取消
var hasPutListener = life.emit('clickEvent','李白')
// //是否被監聽
 console.log(hasChangeListener)
 console.log(hasPutListener)      
08慕課網《進擊Node.js基礎(一)》事件events

 監聽數量

console.log('changeEvent:' + life.listeners('changeEvent').length)
console.log('clickEvent:' + life.listeners('clickEvent').length)
console.log('all:' + life.listeners.length)
//EventEmitter提供的方法
console.log('EventEmitter提供:')
console.log('changeEvent:' + EventEmitter.listenerCount(life,'changeEvent'))
console.log('clickEvent:' + EventEmitter.listenerCount(life,'clickEvent'))      
08慕課網《進擊Node.js基礎(一)》事件events