Node.js中使用事件发射器模式实现事件绑定详解
在Node里,很多对象都会发射事件。比如,一个TCP服务器,每当有客户端请求连接就会发射“connect”事件,又比如,每当读取一整块数据,文件系统就会发射一个“data”事件。这些对象在Node里被称为事件发射器(eventemitter)。事件发射器允许程序员订阅他们感兴趣的事件,并将回调函数绑定到相关的事件上,这样每当事件发射器发射事件时回调函数就会被调用。发布/订阅模式非常类似传统的GUI模式,比如按钮被点击时程序就会收到相应的通知。使用这种模式,服务端程序可以在一些事件发生时作出反应,比如有客户端连接,socket上有可用数据,或者文件被关闭的时候。
还可以创建自己的事件发射器,事实上,Node专门提供了一个EventEmitter伪类,可以把它当作基类来创建自己的事件发射器。
理解回调模式
异步编程不使用函数返回值来表明函数调用的结束,而是采用后继传递风格。
“后继传递风格”(CPS:Continuation-passingstyle)是一种编程风格,流程控制被显式传递给下一步操作……
CPS风格的函数会接受一个函数作为额外参数,这个函数用来显式指出程序控制的下个流程,当CPS函数计算出它的“返回值”,它就会调用那个代表了程序下个流程的函数,并将CPS函数的“返回值”作为其参数。
出自维基百科——http://en.wikipedia.org/wiki/Continuation-passing_style
这种编程风格里,每个函数在执行结束后都会调用一个回调函数,这样程序就可以继续运行。后面你会明白,JavaScript非常适合这种编程风格,下面是个Node下将文件加载到内存的例子:
varfs=require('fs');
fs.readFile('/etc/passwd',function(err,fileContent){
if(err){
throwerr;
}
console.log('filecontent',fileContent.toString());
});