真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Node.js中的事件是什么

這篇文章給大家分享的是有關(guān)Node.js中的事件是什么的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站建設(shè)、長(zhǎng)泰網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)、長(zhǎng)泰網(wǎng)絡(luò)營(yíng)銷(xiāo)、長(zhǎng)泰企業(yè)策劃、長(zhǎng)泰品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供長(zhǎng)泰建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

前端對(duì)事件肯定不陌生,為 window 綁定 scroll 事件

window.addEventListener('scroll', ev => {
	console.log(ev);
});

Node.js 大部分異步操作使用事件驅(qū)動(dòng),所有可以觸發(fā)事件的對(duì)象都繼承了 EventEmitter

事件監(jiān)聽(tīng)

on

Node.js 事件監(jiān)聽(tīng)使用和 jQuery API 非常類似emitter.on(eventName, listener)

const ee = new EventEmitter();
ee.on('foo', () => console.log('a'));
  1. EventEmitter 實(shí)例會(huì)維護(hù)一個(gè) listener 數(shù)組,每次 listener 默認(rèn)會(huì)被添加到數(shù)組尾部
  2. 每次添加 listener 不會(huì)檢查是否添加過(guò),多次調(diào)用 on 傳入相同的 eventName 和 listener,會(huì)導(dǎo)致 listener 被添加多次

prependListener

emitter.prependListener(eventName, listener)
通過(guò) prependListener 可以把 listener 添加到 listener 數(shù)組頭部

const ee = new EventEmitter();
ee.prependListener('foo', () => console.log('a'));

once

如果希望 listener 被觸發(fā)一次后就不再觸發(fā),可以使用 once 來(lái)綁定事件

const ee = new EventEmitter();
ee.once('foo', () => console.log('a'));

事件觸發(fā)

emitter.emit(eventName[, ...args])
在瀏覽器環(huán)境中開(kāi)發(fā)者事件相關(guān)的大部分工作是訂閱事件,也就是綁定事件處理函數(shù) listener,在 Node.js 事件編程中經(jīng)常需要?jiǎng)?chuàng)建事件對(duì)象,在合理實(shí)際觸發(fā)事件。使用 emit 方法可以按照 listener 注冊(cè)的順序,同步地調(diào)用每個(gè)注冊(cè)到名為 eventName 的事件的監(jiān)聽(tīng)器,并傳入提供的參數(shù)

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// 第一個(gè)監(jiān)聽(tīng)器。
myEmitter.on('event', function firstListener() {
  console.log('第一個(gè)監(jiān)聽(tīng)器');
});
// 第二個(gè)監(jiān)聽(tīng)器。
myEmitter.on('event', function secondListener(arg1, arg2) {
  console.log(`第二個(gè)監(jiān)聽(tīng)器中的事件有參數(shù) ${arg1}、${arg2}`);
});
// 第三個(gè)監(jiān)聽(tīng)器
myEmitter.on('event', function thirdListener(...args) {
  const parameters = args.join(', ');
  console.log(`第三個(gè)監(jiān)聽(tīng)器中的事件有參數(shù) ${parameters}`);
});

console.log(myEmitter.listeners('event'));

myEmitter.emit('event', 1, 2, 3, 4, 5);

// Prints:
// [
//   [Function: firstListener],
//   [Function: secondListener],
//   [Function: thirdListener]
// ]
// 第一個(gè)監(jiān)聽(tīng)器
// 第二個(gè)監(jiān)聽(tīng)器中的事件有參數(shù) 1、2
// 第三個(gè)監(jiān)聽(tīng)器中的事件有參數(shù) 1, 2, 3, 4, 5

this 指向

eventEmitter.emit() 方法可以傳任意數(shù)量的參數(shù)到 listener, this 關(guān)鍵詞會(huì)被指向 listener 所綁定的 EventEmitter 實(shí)例

const myEmitter = new MyEmitter();
myEmitter.on('event', function(a, b) {
  console.log(a, b, this, this === myEmitter);
  // 打印:
  //   a b MyEmitter {
  //     domain: null,
  //     _events: { event: [Function] },
  //     _eventsCount: 1,
  //     _maxListeners: undefined } true
});
myEmitter.emit('event', 'a', 'b');

也可以使用 ES6 的箭頭函數(shù)作為監(jiān)聽(tīng)器。但 this 關(guān)鍵詞不會(huì)指向 EventEmitter 實(shí)例:

const myEmitter = new MyEmitter();
myEmitter.on('event', (a, b) => {
  console.log(a, b, this);
  // 打印: a b {}
});
myEmitter.emit('event', 'a', 'b');

異步調(diào)用

EventEmitter 以注冊(cè)的順序同步地調(diào)用所有 listener,這樣可以確保事件的正確排序,listener 可以使用 setImmediate()process.nextTick() 方法切換到異步的操作模式

const myEmitter = new MyEmitter();
myEmitter.on('event', (a, b) => {
  setImmediate(() => {
    console.log('異步地發(fā)生');
  });
});
myEmitter.emit('event', 'a', 'b');

事件卸載

Node.js 提供了幾種卸載事件綁定的方法

off/removeListener

off 方法是 removeListener 方法的別名,用于清理事件綁定 emitter.removeListener(eventName, listener)

const callback = (stream) => {
  console.log('已連接');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

removeListener() 最多只會(huì)從監(jiān)聽(tīng)器數(shù)組中移除一個(gè)監(jiān)聽(tīng)器。 如果監(jiān)聽(tīng)器被多次添加到指定 eventName 的監(jiān)聽(tīng)器數(shù)組中,則必須多次調(diào)用 removeListener() 才能移除所有實(shí)例

removeAllListeners

emitter.removeAllListeners([eventName])
移除指定的 eventName 事件的 listener,如果沒(méi)有指定 eventName,則移除事件對(duì)象的所有 listener??梢酝ㄟ^(guò) emitter.eventNames() 獲取事件對(duì)象上的 eventName 數(shù)組

const EventEmitter = require('events');
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});

myEE.eventNames().forEach(eventName => myEE.removeAllListeners);

感謝各位的閱讀!關(guān)于Node.js中的事件是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


本文標(biāo)題:Node.js中的事件是什么
分享網(wǎng)址:http://weahome.cn/article/pooogd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部