iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >nodejs中events模块怎么办
  • 904
分享到

nodejs中events模块怎么办

2023-06-06 15:06:51 904人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关nodejs中events模块怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如

这篇文章将为大家详细讲解有关nodejs中events模块怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如Http、fs等。本文将详细介绍nodejs中的事件机制

EventEmitter

  多数 node.js 核心 api 都是采用惯用的异步事件驱动架构,其中某些类型的对象(称为触发器)会周期性地触发命名事件来调用函数对象(监听器)。例如,一个net.Server对象会在每次有新连接时触发一个事件;一个 fs.ReadStream 会在文件被打开时触发一个事件;一个 stream会在数据可读时触发事件。

【EventEmitter】

  EventEmitter 类由 events 模块定义和开放的,所有能触发事件的对象都是 EventEmitter 类的实例

var EventEmitter = require('events');console.log(EventEmitter);

  events模块的EventEmitter属性指向该模块本身

var events = require('events');console.log(events.EventEmitter === events);//true

  EventEmitter是一个构造函数,可以用来生成事件发生器的实例emitter

var EventEmitter = require('events');var emitter = new EventEmitter();console.log(emitter);

方法

【emitter.emit(eventName[, ...args])】

eventName <any>...args <any>

  该方法按监听器的注册顺序,同步地调用每个注册到名为eventName事件的监听器,并传入提供的参数。如果事件有监听器,则返回true,否则返回false

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test1',function(){});console.log(emitter.emit('test1'));//trueconsole.log(emitter.emit('test2'));//false

【emitter.on(eventName, listener)】

  该方法用于添加listener函数到名为eventName的事件的监听器数组的末尾

eventName <any> 事件名listener <Function> 回调函数

  [注意]不会检查listener是否已被添加。多次调用并传入相同的eventName和listener会导致listener被添加与调用多次

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test',function(){    console.log(1);});emitter.on('test',function(){    console.log(2);});emitter.emit('test');//1 2

  该方法返回一个 EventEmitter 引用,可以链式调用

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test',function(){    console.log(1);}).on('test',function(){    console.log(2);});emitter.emit('test');//1 2

【emitter.addListener(eventName, listener)】

  emitter.on(eventName, listener) 的别名

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.addListener('test',function(){    console.log(1);});emitter.emit('test');//1

【emitter.prependListener()】

  与on()方法不同,prependListener()方法可用于将事件监听器添加到监听器数组的开头

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test',function(){    console.log(1);}).prependListener('test',function(){    console.log(2);});emitter.emit('test');//2 1

【emitter.once(eventName, listener)】

  该方法添加一个单次 listener 函数到名为 eventName 的事件。 下次触发 eventName 事件时,监听器会被移除,然后调用

eventName <any> 事件名listener <Function> 回调函数
var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test',function(){    console.log(1);}).once('test',function(){    console.log(2);});emitter.emit('test');//1 2emitter.emit('test');//1

【emitter.prependOnceListener() 】

  该方法用于将事件监听器添加到监听器数组开头。下次触发eventName事件时,监听器会被移除,然后调用

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test',function(){    console.log(1);}).prependOnceListener('test',function(){    console.log(2);});emitter.emit('test');//2 1emitter.emit('test');//1

【emitter.removeAllListeners([eventName])】

eventName <any>

  移除全部或指定 eventName 的监听器,返回一个 EventEmitter 引用,可以链式调用

  [注意]在代码中移除其他地方添加的监听器是一个不好的做法,尤其是当 EventEmitter 实例是其他组件或模块(如 Socket 或文件流)创建的

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test',function(){    console.log(1);}).removeAllListeners('test');emitter.emit('test');//''

【emitter.removeListener(eventName, listener)】

eventName <any>listener <Function>

  从名为 eventName 的事件的监听器数组中移除指定的 listener

var EventEmitter = require('events');var emitter = new EventEmitter();function show(){    console.log(1);}emitter.on('test',show).removeListener('test',show);emitter.emit('test');//''

  [注意]removeListener最多只会从监听器数组里移除一个监听器实例。如果任何单一的监听器被多次添加到指定eventName的监听器数组中,则必须多次调用removeListener才能移除每个实例

var EventEmitter = require('events');var emitter = new EventEmitter();function show(){    console.log(1);}emitter.on('test',show).on('test',show).removeListener('test',show);emitter.emit('test');//'1'

  [注意]一旦一个事件被触发,所有绑定到它的监听器都会按顺序依次触发。这意味着,在事件触发后、最后一个监听器完成执行前,任何 removeListener() 或 removeAllListeners() 调用都不会从 emit() 中移除它们。 随后的事件会像预期的那样发生

  因为监听器是使用内部数组进行管理的,所以调用它会改变在监听器被移除后注册的任何监听器的位置索引。 虽然这不会影响监听器的调用顺序,但意味着由 emitter.listeners() 方法返回的监听器数组副本需要被重新创建

var EventEmitter = require('events');var emitter = new EventEmitter();function show1(){    console.log(1);    emitter.removeListener('test',show2);}function show2(){    console.log(2);}emitter.on('test',show1).on('test',show2);emitter.emit('test');//1 2emitter.emit('test');//1

设置

【emitter.eventNames()】

  返回一个列出触发器已注册监听器的事件的数组。 数组中的值为字符串或符号

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.addListener('test1',function(){console.log(1);});emitter.addListener('test2',function(){console.log(2);});console.log(emitter.eventNames());//[ 'test1', 'test2' ]

【emitter.listenerCount(eventName)】

eventName <any> 正在被监听的事件名

  返回正在监听名为 eventName 的事件的监听器的数量

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.addListener('test',function(){console.log(1);});emitter.addListener('test',function(){console.log(1);});console.log(emitter.listenerCount('test'));//2

【emitter.listeners(eventName)】

eventName <any>

  返回名为 eventName 的事件的监听器数组的副本

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.addListener('test',function(){console.log(1);});emitter.addListener('test',function(){console.log(2);});console.log(emitter.listeners('test'));//[ [Function], [Function] ]emitter.listeners('test')[0]();//1

【emitter.getMaxListeners()】

  返回 EventEmitter 当前的最大监听器限制值

var EventEmitter = require('events');var emitter = new EventEmitter();console.log(emitter.getMaxListeners());//10

【emitter.setMaxListeners(n)】

  默认情况下,如果为特定事件添加了超过 10 个监听器,则 EventEmitter 会打印一个警告。 此限制有助于寻找内存泄露。 但是,并不是所有的事件都要被限为 10 个。 emitter.setMaxListeners() 方法允许修改指定的 EventEmitter 实例的限制。 值设为 Infinity(或 0)表明不限制监听器的数量。返回一个 EventEmitter 引用,可以链式调用

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});
var EventEmitter = require('events');var emitter = new EventEmitter();emitter.setMaxListeners(11);emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});

【EventEmitter.defaultMaxListeners】
  每个事件默认可以注册最多10个监听器。单个EventEmitter实例的限制可以使用emitter.setMaxListeners(n)方法改变。所有EventEmitter实例的默认值可以使用EventEmitter.defaultMaxListeners属性改变

  [注意]设置 EventEmitter.defaultMaxListeners 要谨慎,因为会影响所有EventEmitter 实例,包括之前创建的。因而,调用 emitter.setMaxListeners(n) 优先于 EventEmitter.defaultMaxListeners

var EventEmitter = require('events');var emitter = new EventEmitter();EventEmitter.defaultMaxListeners = 11;emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});

事件

【'newListener' 事件】

eventName <any> 要监听的事件的名称listener <Function> 事件的句柄函数

  EventEmitter 实例会在一个监听器被添加到其内部监听器数组之前触发自身的 'newListener' 事件

  注册了 'newListener' 事件的监听器会传入事件名与被添加的监听器的引用。事实上,在添加监听器之前触发事件有一个微妙但重要的副作用: 'newListener' 回调中任何额外的被注册到相同名称的监听器会在监听器被添加之前被插入

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('newListener',function(){    console.log(2);})emitter.on('test',function(){    console.log(1);})emitter.emit('test');//2 1
var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test',function(){    console.log(1);})emitter.on('newListener',function(){    console.log(2);})emitter.emit('test');//1

【'removeListener' 事件】

eventName <any> 事件名listener <Function> 事件句柄函数

  'removeListener' 事件在 listener 被移除后触发

var EventEmitter = require('events');var emitter = new EventEmitter();function show(){    console.log(1);}emitter.on('removeListener',function(){    console.log(2);//2})emitter.on('test',show).removeListener('test',show);
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){    console.log(1);}emitter.on('test',show).removeListener('test',show);emitter.on('removeListener',function(){    console.log(2);//''})
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){    console.log(1);}emitter.removeListener('test',show);emitter.on('removeListener',function(){    console.log(2);//''})

关于“nodejs中events模块怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: nodejs中events模块怎么办

本文链接: https://www.lsjlt.com/news/247597.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nodejs中events模块怎么办
    这篇文章将为大家详细讲解有关nodejs中events模块怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如...
    99+
    2023-06-06
  • Node.js的Events模块怎么使用
    本篇内容主要讲解“Node.js的Events模块怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js的Events模块怎么使用”吧!Event...
    99+
    2024-04-02
  • Node.js中的events事件模块怎么使用
    本篇内容主要讲解“Node.js中的events事件模块怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中的events事件模块怎么使用”吧...
    99+
    2024-04-02
  • Node的events模块怎么使用
    这篇文章主要介绍了Node的events模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node的events模块怎么使用文章都会有所收获,下面我们一起来看看吧。在 vue 的项目中,有时我们会用到全...
    99+
    2023-07-05
  • nodejs内置模块找不到怎么办
    近年来,Node.js 成为了前端开发不可或缺的技术之一。由于其高效的异步 I/O 特性、强大的模块化支持和轻量级的运行方式,越来越多的开发者将其应用于实际项目中。然而,正如任何一种技术一样,Node.js 也存在着一些问题和挑战。其中之一...
    99+
    2023-05-14
  • nodejs模块怎么用
    Node.js 是一套基于事件驱动、异步 I/O 的开源跨平台 JavaScript 运行时环境。在 Node.js 中,使用模块来组织代码,每个模块都是一个独立的文件,可以通过导入/导出进行模块间调用和逻辑复用。本文将介绍 Node.js...
    99+
    2023-05-18
  • Nodejs中stream流模块怎么样
    这篇文章将为大家详细讲解有关Nodejs中stream流模块怎么样,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。stream流模块,是Node中非常核心的一个模块,其它模...
    99+
    2024-04-02
  • nodejs中url模块怎么使用
    这篇文章主要介绍了nodejs中url模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nodejs中url模块怎么使用文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • Nodejs中的net模块怎么用
    这篇文章主要介绍了Nodejs中的net模块怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nodejs中的net模块怎么用文章都会有所收获,下面我们一起来看看吧。1. O...
    99+
    2024-04-02
  • Nodejs-cluster模块怎么用
    这篇文章给大家分享的是有关Nodejs-cluster模块怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。基本用法Node.js默认单进程运行,对于32位系统最高可以使用51...
    99+
    2024-04-02
  • nodejs怎么设置模块
    Node.js是一种基于事件驱动的异步I/O框架,它迅速发展为基于JavaScript的服务器端开发工具。Node.js的核心思想是模块化编程,这使得代码复用性和模块化极强。通过使用模块化编程,Node.js可以对程序进行更好的拆分,每个模...
    99+
    2023-05-23
  • 怎么删除nodejs模块
    这篇文章主要介绍了怎么删除nodejs模块,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 nodejs删除模块的...
    99+
    2024-04-02
  • Nodejs中怎么自定义CommonJS模块
    这篇文章主要介绍了Nodejs中怎么自定义CommonJS模块的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nodejs中怎么自定义CommonJS模块文章都会有所收获,下面我...
    99+
    2024-04-02
  • Nodejs中的buffer模块怎么使用
    这篇文章主要介绍“Nodejs中的buffer模块怎么使用”,在日常操作中,相信很多人在Nodejs中的buffer模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • Nodejs中内置模块怎么使用
    小编给大家分享一下Nodejs中内置模块怎么使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!内置模块的基本使用// 01. 导包const&...
    99+
    2023-06-14
  • Nodejs中的http模块怎么使用
    这篇文章主要介绍了Nodejs中的http模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nodejs中的http模块怎么使用文章都会有所收获,下面我们一起来看看吧。一、http 模块http 模块是...
    99+
    2023-07-04
  • Node中的Events模块介绍及应用
    目录Node 中的 Events1. 事件和监听器2. 处理 error 事件3. 继承 Events 模块4. 手写 EventEmitterNode 中的 Events Node...
    99+
    2022-11-13
    Node Events Node Events模块
  • nodejs中的crypto加密模块怎么用
    这篇文章将为大家详细讲解有关nodejs中的crypto加密模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法。也提供了 Ope...
    99+
    2023-06-14
  • 什么是nodejs模块
    本篇内容介绍了“什么是nodejs模块”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Node.js中的events事件模块知识点总结
    通过对Node的学习及应用,我们知道NodeJS其采用单线程、事件驱动、非阻塞I/O等架构设计,非常适用于高并发、I/O密集型应用。 1. 什么是事件驱动? 事件驱动,简单来说就是...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作