91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js(十)——NodeJs事件

發布時間:2020-09-04 12:14:03 來源:網絡 閱讀:580 作者:mazongfei 欄目:web開發

NodeJs的事件模塊

在爬蟲代碼中有個on('data')事件,為什么響應的res回有一個on方法呢,那這個on做什么事情呢,要回答這些問題,要從事件模塊說起,在NodeJs中不存在瀏覽器中的冒泡、捕獲這些行為的,所以NodeJs中實現的events這個模塊,里面的大多數模塊都集成了這個模塊,

所以events是最重要的一個模塊,它只對外暴露了一個對象,就是eventImit,作用有兩個分別是事件的發射,和事件的監聽,兩個不同的執行環節本來是毫無聯系的,但是有了事件模塊的支持以后,這兩個環節就能建立起聯系,eventImit支持多個事件監聽器,最大值是10個,

就是在某個事件添加10個事件監聽器;

 

var EventEmitter = require('events').EventEmitter

var life = new EventEmitter()

//addEventListener
life.on('求安慰',function(who){
	console.log('給'+who+'放水')
})

life.on('求安慰',function(who){
	console.log('給'+who+'揉肩')
})

life.on('求安慰',function(who){
	console.log('給'+who+'做飯')
})

life.on('求安慰',function(who){
	console.log('給'+who+'洗衣服')
})

life.on('求安慰',function(who){
	console.log('給'+who+'。。。。。。。。5')
})

life.on('求安慰',function(who){
	console.log('給'+who+'。。。。。。。。6')
})

life.on('求安慰',function(who){
	console.log('給'+who+'。。。。。。。。7')
})

life.on('求安慰',function(who){
	console.log('給'+who+'。。。。。。。。8')
})

life.on('求安慰',function(who){
	console.log('給'+who+'。。。。。。。。9')
})

life.on('求安慰',function(who){
	console.log('給'+who+'。。。。。。。。10')
})
//觸發
life.emit('求安慰','漢子')

運行結果如下:

Node.js(十)——NodeJs事件

如果綁定的事件多于10個呢,會怎樣?

life.on('求安慰',function(who){
	console.log('給'+who+'你想累死我啊')
})

執行結果如下:

Node.js(十)——NodeJs事件

第11個監聽器還是會執行的,但是會拋出了一個警告,那這個就是官方建議的,對于一個事件設置不要超過10個監聽器,太多的話會導致內存的泄露,當然這個值是可以修改的,

那我們去修改一下事件所忍受的極限:

life.setMaxListeners(11)

//添加在new對象之后,on之前

執行效果如下:

Node.js(十)——NodeJs事件

如果我對life注冊另外一個事件,會不會占用這個最大值?

代碼如下:

life.on('求關愛',function(who){
	console.log('給'+who+'買衣服')
})
life.on('求關愛',function(who){
	console.log('給'+who+'交工資')
})

運行結果如下:

Node.js(十)——NodeJs事件

從運行結果發現:如果沒有emit求關愛事件是不會觸發監聽函數的,

不是為所有事件統一分配的,只是為求安慰事件分配11個額度。


查看一個事件是否被監聽過?

根據監聽事件的返回值是個boolean類型

var flag1 = life.emit('求安慰','漢子')
var flag2 = life.emit('求關愛','妹子')
var flag3 = life.emit('求什么','漢子和漢子')

console.log(flag1);
console.log(flag2);
console.log(flag3);

運行結果如下:

Node.js(十)——NodeJs事件


如何移除一個事件呢?

錯誤的寫法:寫在事件觸發emit之前

life.removeListener('求安慰',function(){
	console.log('給'+who+'放水')
})

運行結果如下:

Node.js(十)——NodeJs事件

說明沒有起作用。

那我們應該怎么寫呢?匿名函數這種形式是不行的,需要寫具名的函數。

改造如下:

function water(who){
	console.log('給'+who+'放水')
}

//addEventListener
life.on('求安慰',water)

//移除
life.removeListener('求安慰',water)

運行結果如下:

Node.js(十)——NodeJs事件

移除事件成功。

查詢剩余的事件監聽數?

console.log(life.listeners('求安慰').length)
console.log(EventEmitter.listenerCount(life,'求安慰'))

結果如下:

Node.js(十)——NodeJs事件

移除全部的監聽:包括求關愛、求安慰的

life.removeAllListeners()

運行結果如下:

Node.js(十)——NodeJs事件

如果只想移除求安慰的,這個時候就需要傳遞具體的事件的名字的,

例如:

life.removeAllListeners('求安慰')

運行結果如下:

Node.js(十)——NodeJs事件


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

垦利县| 永修县| 维西| 长宁县| 宁河县| 阿拉善右旗| 余干县| 桂东县| 阳新县| 内黄县| 宁武县| 黄大仙区| 遂宁市| 苏尼特右旗| 普安县| 茶陵县| 承德县| 安阳市| 石嘴山市| 射阳县| 贵港市| 博湖县| 睢宁县| 三门峡市| 伊吾县| 泽库县| 新和县| 资讯| 大新县| 开封市| 临泉县| 通辽市| 怀仁县| 江孜县| 沈丘县| 民和| 当阳市| 新巴尔虎左旗| 高碑店市| 安顺市| 天台县|