24
Feb
2014
温习Node基础(2)——事件
字数:959
作者:Jerry
Nodejs在github上有这样一句介绍:Evented I/O for V8 JavaScript。基于V8引擎实现的事件驱动IO。事件驱动,是Nodejs这么受欢迎的很重要的一个原因,本章会深入Nodejs的事件部分。
在Nodejs之前,后端JavaScript技术已经有了。而Nodejs的出现,改变了两个状况:
- 统一了前后端JavaScript的编程模型。
- 利用事件机制充分利用异步IO突破单线程编程模型的性能瓶颈,是JavaScript在后端达到实用价值。
事件机制的实现
Nodejs中的大部分模块,都继承自Event模块。
Event模块(events.EventEmitter)是一个简单的事件监听器模式的实现,具有addListener/on,once,removeListener,removeAllListeners,emit
等基本的事件监听模式的方法实现。当然,它和前端DOM树上的事件不同,不存在冒泡、捕获,也没有preventDefault()等处理事件传递的方法。
另外,事件监听器模式也是事件钩子(hook)的机制,利用事件钩子将内部数据或状态暴露给外部调用者。
事件机制的进阶应用
继承events.EventEmitter
继承events.EventEmitter类很简单,以下是Nodejs中流对象继承EventEmitter:
function Stream(){
events.EventEmitter.call(this);
}
util.inherits(Stream,events.EventEmitter);
多事件之间协作
在渲染一张页面时,通常要从多个数据源拉取数据并渲染至客户端。Nodejs中可以方便地同时并行发起对多个数据源的请求。
api.getUser("username",function(profile){
// got the profile
});
api.getTimeline("username",function(timeline){
// got the timeline
});
api.getSkin("username",function(skin){
// got the skin
});