日期:2014-05-16  浏览次数:20405 次

Nodejs 中的控制流--the Do Style(二)
最近看到一篇关于node中改变异步编程控制流的文章:Control Flow in Node Part II.

翻译如下:(有删减)

当前在Node中,有两种方式可以处理异步返回值问题:“回调”和“事件发射”。这些你都可以在Nodejs官网上了解到。我在这里将谈论另一种管理异步返回[值或流]事件的方式。

回调和事件发射器之间的区别是什么?

回调其实就是一个function,但是用于处理异步的。


fs.readFile()传入一个文件名称作为参数,然后“返回”文件的内容。但它最终并不是真正地返回了文件内容,而是把结果传递给了作为参数的回调函数。

有时你想要监听的事件可能会触发很多次。例如,在一个web服务器中,当处理一个请求时,可能"data"事件会被触发一次或者多次,最后“end”事件才会被触发。


它与回调的不同在于:你要么得到一个结果,要么得到一个错误。对于事件来讲,你永远都不能得到两者,或者超过一种结果(注:这里侧重于表达“事件的触发”,例如要么你就触发一个success事件,要么就触发一个error事件)。所以,如果有超过两个事件,它们可能会被调用很多次,那么你就需要更为强大、灵活的事件发射器。

Node.js 的回调风格

Node最初使用promises代替callback,在经过很多争辩、讨论之后,node决定用简单的callback来取代promise。
在node中,任何异步的函数都接受一个回调来作为它最后一个参数。在fs模块中的大部分函数都是这样。并且,这些回调函数大部分都会以一个error参数(如果有的话),作为其第一个参数。