文档章节

Node.js:理解使用事件发射器模式简化事件绑定

刘纪君
 刘纪君
发布于 2014/06/07 20:59
字数 872
阅读 488
收藏 5
 CommonJS标准 每个模块都由一个上下文将该模块与其他模块隔离

 标准的回调模式:
(CPS Continuation-passing style):后继传递风格
    异步编程风格是一种程序的流程控制权以后继的形式被显式的传递的编程风格。
    按后继传递风格编写的函数以一个显式的"后继"作为额外的参数,"后继"实际
    上是一个函数,当CPS函数计算出返回值时,它就调用后继函数,并将  CPS
    函数的返回值作为参数。这种模式能够很好的处理函数执行结束后需要通知客户端的情况。

var fs = require('fs');
fs.readFile('/etc/passwd',function(err,fileContent){
    if(err){
        throw err;
    }
    console.log("fileContent " + fileContent.toString());
});
//回调函数第一个参数是一个错误对象,如果有错误发生,这个参数就是Error的一个实例,这就是比Node中的应用CPS编程的一般模式。

理解事件发射器模式:
事件发射器:可以发射事件的对象。
事件监听器:绑定到事件发射器上的代码,负责监听特定类型的事件。

理解事件类型:
发射的事件具有一定的类型,类型用一个字符串表示如"data","end","on" 等,他们都是由事件发射器定义的任意字符串。当你使用到API时
应该会有对应的文档记录他能够发射的事件类型。 一旦有事件发生,事件发射器就会调用相应的事件监听器,并将相关数据作为参数传递给事件监听器。
虽然事件发生器时服务任意类型事件的通用接口,但在Node的实现中有一个特例即error事件,Node中大多数事件发射器实现在程序发生错误时都会发射"error"事件,所以都要监听这个错误事件,防止向上抛出异常。

应用事件发射器API:
    任何实现了事件发射器模式的对象(例如:TCP http等)都实现了:
    1:addListener 和on ->为指定的事件添加事件监听器
    2:once->为指定的事件添加只会调用一次的事件监听器
    3:removeEventListener ->删除绑定到指定事件上的某个指定的事件监听器。
    4:removeAllEventListener ->删除绑定到指定事件上的全部的事件监听器。
允许绑定多个事件监听器。根据事件类型,事件发射器负责按照事件所绑定的监听器的注册顺序依次调用事件监听器。这就意味着:
    1:某个事件监听器也许并不会在事件发射之后就立即被调用,也许在它之前还有别的事件监听器被调用。
    2:异常被抛出到堆栈并不正常,他通常时有代码中的错误引起的。

创建事件发射器:
    1:从Node事件发射器继承
        var util = require('util');
        var eventEmitter = require('events').EventEmitter;
        var myClass = function(){}
        util.inherits(myClass,eventEmitter);//util.inherits建立了一条原型链,使myClass类实例能够使用EventEmitter的原型方法

















© 著作权归作者所有

共有 人打赏支持
刘纪君
粉丝 29
博文 133
码字总数 59637
作品 0
郑州
高级程序员
Node.js---03、node.js 的事件(仅四行关键代码)以及应用实例

一、自定义事件的基本步骤 1、加载 events 事件对象(const EventEmitter = require('events')); 2、创建事件存储容器(let emitter = new EventEmitter( )); 3、注册绑定事件(emitter...

秋季长青
2017/11/07
0
0
ReactiveCocoa - Swift 解读系列一:信号的创建以及发送事件

最近花了一点时间去学习ReactiveSwift(以下称RAS),这是一款基于ReactiveCocoa开发的Swift框架,由于这个框架大量使用了函数式编程和响应式编程的结合,所以它也被称之为函数相应式编程 --...

BennyLoo
2017/11/16
0
0
NodeJS 事件循环

Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。 Node.js 基本...

我语文超级不好
2016/11/09
12
0
Node.js流,这样的打开方式对不对!

Node.js流,这样的打开方式对不对! 俗话说的好:“人往高处走,水往低处流”;古语有云:“落花有意,流水无情”。()哎呀🤣,各位大佬,这点小事用不着惊动二营长的意大利炮了吧,进错频...

亦曾执着过不后悔
08/20
0
0
每天阅读一个 npm 模块(5)- ee-first

系列文章: 每天阅读一个 npm 模块(1)- username 每天阅读一个 npm 模块(2)- mem 每天阅读一个 npm 模块(3)- mimic-fn 每天阅读一个 npm 模块(4)- throttle-debounce 一句话介绍 今天...

elvinnn
09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java Web--增删改查之二界面后台java代码(转载参考)

/** *  *//** * @author Administrator * */package dao; import java.sql.*;public class DBConn {/** * 链接数据库 * @return */  ...

小橙子的曼曼
7分钟前
0
0
Redis源码阅读笔记-对象及其类型和编码

总结之《Redis设计与实现》 对象 Redis中是使用对象来便是数据库中的键和值。 结构 // server.h...#define LRU_BITS 24...typedef struct redisObject { unsigned type:4; ...

Jian_Ming
20分钟前
0
0
laravel框架常用目录路径

laravel框架常用目录路径 app_path()app_path函数返回app目录的绝对路径:$path = app_path();你还可以使用app_path函数为相对于app目录的给定文件生成绝对路径:$path = app_p...

高处胜寒
21分钟前
0
0
记一次winserver2003系统,https无法访问,内存占用持续增加,解决办法

先交代一下环境: win server2003系统,系统装在hyper-v虚拟机里 大概2016年底的镜像,距离今天两年左右 病症:大概9月10号左右用这个镜像还可以访问https,但是今天用这个镜像新装的系统,就...

阳阳露
36分钟前
3
0
Vue学习资料

一直以为Vue是依赖nodejs的。 作为前端也可以耦合性就很低了。 //npm包管理器 进行管理npm install vue//初始化一个项目vue init//本地调试npm run dev//编译完成 ...

大灰狼wow
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部