JavaScript异步编程(二) 分布式事件

分布式事件

发布/订阅模式分发事件

?PubSub模式

浏览器允许向DOM元素附加事件处理器;

Node的EventEmitter对象

emitter.on(‘evacuate’, function() {…});

emitter.emit(‘evacuate’);

emit意为触发,负责调用给定事件类型的所有处理器

创建自己的PubSub

PubSub.on = function(eventType, handler) {

if(!(eventType in this.handlers)) {

this.handlers[eventType] = handler;

return this;

}

};

PubSub.emit = function(eventType) {

var handlerArgs = Array.prototype.slice.call(arguments, 1);

for(var i =0; i < this.handlers[eventType].length; i++) {

this.handlers[eventType][i].apply(this, handlerArgs);

}

return this;

};

jQuery的名称空间化事件

如果同时绑定了名称为click.tbb和hover.tbb两个事件,简单地调用unbind(‘.tbb’)就可以同时解绑它们。

jQuery还支持用空格隔开多个事件来同时绑定或触发多种事件类型。

同步性

PubSub模式是一项处理异步事件的重要技术,但内在跟异步没有任何关系。

PubSub模式简化了事件的命名、分发和堆积。

?事件化模型

只要对象带有PubSub接口,就可以称之为事件化对象。

特殊情况出现在用于存储数据的对象因内容变化而发布事件是,这里用于存储数据的对象又称作模型。

老式的JavaScript依靠输入事件的处理器直接改变DOM。

新式的JavaScript先改变模型,接着由模型触发事件而导致DOM的更新。

jQuery自定义事件

在jQuery中,可以使用trigger方法基于任意DOM元素触发任何想要的事件,

冒泡技术:只要某个DOM元素触发了某个事件,其父元素就会接着触发这个事件,接着是父元素的父元素,以此类推,一直上溯到根元素。

只有在冒泡过程中调用事件的stopPropagation方法才会停止。

PubSub的缺陷在于不适用于一次性事件,一次性事件要求对异步函数执行的一次性任务的两种结果(任务成功或失败)做不同处理。例如,Ajax请求。而用于解决一次性事件问题的工具叫做Promise。

时间: 2024-08-26 20:55:35

JavaScript异步编程(二) 分布式事件的相关文章

Javascript异步编程方法之------“事件监听”

Javascript异步编程方法之------“事件监听”另一种思路是采用事件驱动模式.任务的执行不取决于代码的顺序,而取决于某个事件是否发生.还是以f1和f2为例.首先,为f1绑定一个事件(这里采用的jQuery的写法).f1.on('done', f2);上面这行代码的意思是,当f1发生done事件,就执行f2.然后,对f1进行改写:function f1(){setTimeout(function () {// f1的任务代码f1.trigger('done');}, 1000);}f1.

JavaScript异步编程(一) 深入理解JavaScript事件

JavaScript异步编程 深入理解JavaScript事件 ?事件的调度 JavaScript事件处理器在线程空闲之前不会运行 线程的阻塞 var start = new Date(); // setTimeout和setInterval的计时精度比期望值差 setTimeout(function(){ var end = new Date(); console.log('Time elapsed', end - start, 'ms'); }, 500); while(new Date -

Javascript异步编程之二回调函数

上一节讲异步原理的时候基本上把回掉函数也捎带讲了一些,这节主要举几个例子来具体化一下.在开始之前,首先要明白一件事,在javascript里函数可以作为参数进行传递,这里涉及到高阶函数的概念,大家可以自行google一下. 传统的同步函数需要返回一个结果的话都是通过return语句实现,例如: function foo() { var a = 3, b = 2; return a+b; } var c = foo(); console.log(c); //5 就是说后面的代码console.lo

JavaScript异步编程设计快速响应的网络应用

JavaScript已然成为了多媒体.多任务.多内核网络世界中的一种单线程语言.其利用事件模型处理异步触发任务的行为成就了JavaScript作为开发语言的利器.如何深入理解和掌握JavaScript异步编程变得尤为重要!!!<JavaScript异步编程设计快速响应的网络应用>提供了一些方法和灵感. 一.深入理解JavaScript事件 1. 事件的调度 JavaScript事件处理器在线程空闲之前不会运行(空闲时运行). var start = new Date(); setTimeout

深入解析Javascript异步编程

这里深入探讨下Javascript的异步编程技术.(P.S. 本文较长,请准备好瓜子可乐 :D) 一. Javascript异步编程简介 至少在语言级别上,Javascript是单线程的,因此异步编程对其尤为重要. 拿nodejs来说,外壳是一层js语言,这是用户操作的层面,在这个层次上它是单线程运行的,也就是说我们不能像Java.Python这类语言在语言级别使用多线程能力.取而代之的是,nodejs编程中大量使用了异步编程技术,这是为了高效使用硬件,同时也可以不造成同步阻塞.不过nodejs

JavaScript 异步编程

JavaScript 异步编程 第一章 深入理解JavaScript事件 1. javascirpt一般是单线程执行,setTimeout 和 setInterval 仅当cpu空闲时执行. var start = new Date; setTimeout(function(){ var end = new Date; console.log('Time elapsed:', end - start, 'ms'); }, 500); while (new Date - start < 1000)

转: Promises与Javascript异步编程

在如今都追求用户体验的时代,Ajax应用真的是无所不在.加上这些年浏览器技术.HTML5以及CSS3等的发展,越来越多的富Web应用出现:在给与我们良好体验的同时,Web开发人员在背后需要处理越来越多的异步回调逻辑. 笔者对最近读完的<Async Javascript-Build More Responsive Apps with Less Code>(Javascript异步编程-设计快速响应的网络应用)一书以及部分资料,整理了我认为比较重要的一些点以及容易理解错的地方,使大家对 Promi

JavaScript异步编程(2)- 先驱者:jsDeferred

原文出处: linkFly   欢迎分享原创到伯乐头条 JavaScript当前有众多实现异步编程的方式,最为耀眼的就是ECMAScript 6规范中的Promise对象,它来自于CommonJS小组的努力:Promise/A+规范. 研究javascript的异步编程,jsDeferred也是有必要探索的:因为Promise/A+规范的制定基本上是奠定在jsDeferred上,它是javascript异步编程中里程碑式的作品.jsDeferred自身的实现也是非常有意思的. 本文将探讨项目js

Javascript异步编程方法之------“发布/订阅”

Javascript异步编程方法之------“发布/订阅”我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行.这就叫做"发布/订阅模式"(publish-subscribe pattern),又称"观察者模式"(observer pattern).这个模式有多种实现

5分种让你了解javascript异步编程的前世今生,从onclick到await/async

javascript与异步编程 为了避免资源管理等复杂性的问题,javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是为浏览器设计的GUI编程语言,GUI编程的特性之一是保证UI线程一定不能阻塞,否则体验不佳,甚至界面卡死. 一般安卓开发,会有一个界面线程,一个后台线程,保证界面的流畅.由于javascript是单线程,所以采用异步非阻塞的编程模式,javascript的绝大多数api都是异步api. 本文是本人的一个