初探 node events模块

2019-11-04 admin

模块概述

在 node 中 events模块是核心模块之一, 几乎所有常用的 node 模块都继承了 events模块

例如,net.Server 会在每次有新连接时触发事件,fs.ReadStream 会在打开文件时触发事件,stream会在数据可读时触发事件等

events模块本身非常简单,从官网文档中我们发现该模块的API虽然很多,但是我们常用的也就那几个,下面我们来看一下几个简单例子

例子

例子1:单个事件监听
let EventEmitter = require('events')
class Animal extends EventEmitter {}
let dog = new Animal()

dog.on('eat', function() {
  console.log('a dog eating food!')
})

dog.emit('eat')

// a dog eating food!
例子2:同个事件,多个事件监听
let EventEmitter = require('events')
class Animal extends EventEmitter {}
let dog = new Animal()
dog.on('eat', function(){
  console.log('a dog eating food')
})
dog.on('eat', function(){
  console.log('a dog eating')
})
dog.emit('eat')

// a dog eating food
// a dog eating

从上面我们可以看到,事件触发时,事件监听器按照注册的顺序依次执行

例子3:只运行一次的事件监听
let EventEmitter = require('events')
class Animal extends EventEmitter {}
let dog = new Animal()
dog.on('eat',function(){
  console.log('a dog eating food')
})
dog.once('eat',function(){
  console.log('a dog eating food once')
})
dog.emit('eat')
dog.emit('eat')

// a dog eating food
// a dog eating food once
// a dog eating food
例子4: 注册时间监听器前,事件先触发
let EventEmitter = require('events')
class Animal extends EventEmitter {}
let dog = new Animal()
dog.emit('eat',1)
dog.on('eat', function(index){
  console.log('a dog eating food-'+ index)
})
dog.emit('eat',2)
// a dog eating food-2

从上面例子中我们可以看到,注册时间监听器前,事件先触发,则该事件会直接被忽略

例子5:执行顺序
let EventEmitter = require('events')
class Animal extends EventEmitter {}
let dog = new Animal()
dog.on('eat', function(){
  console.log('a dog eating food1')
})
dog.emit('eat')
dog.on('eat', function(){
  console.log('a dog eating food2')
})
// a dog eating food1
// a dog eating food1
例子6:移出事件监听
let EventEmitter = require('events')
class Animal extends EventEmitter {}

function eat(){
 console.log('a dog eating food')
}
let dog = new Animal()
dog.on('eat', eat)
dog.emit('eat')
dog.removeListener('eat', eat)
// a dog eating food

[转载]原文链接:https://segmentfault.com/a/1190000020896094

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-78810.html

文章标题:初探 node events模块

相关文章
node.js调用C++开发的模块实例
如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node。先回顾一下正统的用 C++ 开发 native 模块的方法 #include ...
2017-03-25
Node.js将向移动端扩展
如果你还没有听过Node.js,那么现在就可以了解一下! 目前,来自200多个国家的数以万计的组织在使用Node.js,在Node.js的网站上,每月都有超过200万次下载。但版本发布缓慢使开发人员日益不满,网上出现了创建Node.js分支...
2015-11-12
Node.js v0.11.16 开发版发布
Node.js v0.11.16 开发版发布了,改进记录包括: openssl: Upgrade to 1.0.1l npm: Upgrade to 2.3.0 url: revert support of path for url.fo...
2015-11-12
windows 下安装nodejs 环境变量设置
要设置两个东西,一个是PATH上增加node.exe的目录C:\Program Files\nodejs,一个是增加环境变量NODE_PATH,值为C:\Program Files\nodejs\node_modules 一、下载 去nod...
2017-03-18
nodejs搭建本地服务器并访问文件的方法
安装node:https://nodejs.org/en/download/ 在本地建立目录:f:/nodetest,在该目录下新建index.html作为我们将要访问的内容。新建server.js作为node开启的入口: $ cd f:&...
2017-03-13
Node.js实现Excel转JSON
一直在做一个关于网上选课的系统,选用了时下比较流行的node.js。今天在想怎么把学生或者老师的信息导入进去,涉及数量比较多一点,我手边又正好有一部分excel的表格。就想把excel转成json然后倒入到mongodb中去。 搜了下网上的...
2017-03-23
Vue.js原理分析之observer模块详解
介绍 observer是Vue核心中最重要的一个模块(个人认为),能够实现视图与数据的响应式更新,底层全凭observer的支持。 **注意:**本文是针对Vue@2.1.8进行分析 observer模块在Vue项目中的代码位置是src/c...
2017-03-16
Node.js深受欢迎的六大原因
Node.js鏄�涓€绉嶅悗璧风殑浼樼�€鏈嶅姟鍣ㄧ紪绋嬭��瑷€锛屽畠鐢ㄦ潵鏋勫缓鍜岃繍琛學eb搴旂敤锛岃繖鍜孉SP.NET锛孯uby聽on聽Rails鎴朣pring妗嗘灦鍋氱殑宸ヤ綔鏄�绫讳技鐨勩€傚畠浣跨敤JavaScript浣滀负涓...
2015-11-11
nodejs导出excel的方法
本文实例讲述了nodejs导出excel的方法。分享给大家供大家参考。具体如下: nodejs 对查询数据生成excel并下载,采用方式先生成本excel文件,然后再下载;通过比较采用excel-export插件代码如下: excel.js...
2017-03-27
Windows系统下使用Sublime搭建nodejs环境
1.下载nodejs,并安装ok后,配置好环境变量。 2.下载sublime text3 3.在package install 包中新增node插件(或者直接去SublimeText-Nodejs插件(https://github.com/...
2017-03-22
回到顶部