文档章节

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 中的内存泄露

这篇文章是由Mozilla的Identity团队带来的 A Node.JS Holiday Season系列文章的首篇,该团队上个月发布了 Persona的第一个测试版本。在开发Persona时我们构建了一系列的工具,包括了从调试,...

Jeky
2013/01/16
12.5K
8
websocket与node.js的完美结合

本文为原创文章,出自http://cnodejs.org,转载请注明出处和作者 作者:kongwu 原文:http://cnodejs.org/blog/?p=273 之所以写下此文,是我觉得越是简单的技术往往能发挥越重要的作用,随着...

红薯
2011/03/20
9.6K
2

没有更多内容

加载失败,请刷新页面

加载更多

2018最新Web前端经典面试试题及答案

javascript: JavaScript中如何检测一个变量是一个String类型?请写出函数实现 typeof(obj) === "string" typeof obj === "string" obj.constructor === String 请用js去除字符串空格? 方法一...

Jack088
18分钟前
6
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
23分钟前
1
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
23分钟前
6
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
42分钟前
7
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
53分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部