因本人无js基础,所以在看到有时间.on(‘data’,callback); .on(‘error’,callback);这样的字眼的时候却懵了,error或者data是怎么定义出来的?有相关手册可以查么?
EventEmitter
@sjfkai 可能我没表达清楚,比如:data ,error是怎么来的?
emitter.emit(event[, arg1][, arg2][, …])# Execute each of the listeners in order with the supplied arguments. Returns true if event had listeners, false otherwise.
emitter.emit('error') 就会触发 emitter.on('error',cb)中的cb
emitter.emit('error')
emitter.on('error',cb)
cb
@sjfkai 可能我没表达清楚,加入我传err应该不能识别吧
事件的名字on('foo'),是一种协议(规范),自定义的可以随意其名字,api里的查官方api doc不就行了
on('foo')
源代码,https://github.com/joyent/node/blob/master/lib/events.js node提供两种事件接口,一种是EventEmitter提供的,我们一般on的都是EventEmitter包装过的。还有一种是原生的,接口也是on,但是emit是在c++层面做的,我们一般接触不到,大多都要EventEmitter包装一下的。
想要深入的学习,读源代码,其他的方法都是扯淡,源代码读明白了,自己实现一个,自然就明白了。
@coordcn 我要的答案应该是你说的后者
@songqinghehe https://github.com/joyent/node/blob/master/src/stream_wrap.cc 数据来了OnRead() 数据读完后MakeCallback(),这个过程就是将读取的数据传递给你用on注册的callback,并执行callback。
楼主问的这个问题涉及到js设计模式的pubsub模式 Nodejs的EventEmitter, 就是pubsub的典型栗子 当然你可以自己定义一个。这里写一个很简单的栗子
myPubSub = { handlers:{} } myPubSub.on = function(event, handler){ if (!(event in this.handlers)) { this.handlers[event] = []; } this.handlers[event].push(handler); return this; } myPubSub.emit = function(event) { var arg = [].slice.call(arguments, 1); for(var i = 0; i< this.handlers[event].length; i++){ this.handlers[event][i].apply(this, arg); } return this; }
@struCoder 多谢
http://www.mirana.me/blog/551c3db1e1382344eba6393c 写过分析eventemitter的东西。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
EventEmitter
@sjfkai 可能我没表达清楚,比如:data ,error是怎么来的?
emitter.emit('error')就会触发emitter.on('error',cb)中的cb@sjfkai 可能我没表达清楚,加入我传err应该不能识别吧
事件的名字
on('foo'),是一种协议(规范),自定义的可以随意其名字,api里的查官方api doc不就行了源代码,https://github.com/joyent/node/blob/master/lib/events.js node提供两种事件接口,一种是EventEmitter提供的,我们一般on的都是EventEmitter包装过的。还有一种是原生的,接口也是on,但是emit是在c++层面做的,我们一般接触不到,大多都要EventEmitter包装一下的。
想要深入的学习,读源代码,其他的方法都是扯淡,源代码读明白了,自己实现一个,自然就明白了。
@coordcn 我要的答案应该是你说的后者
@songqinghehe https://github.com/joyent/node/blob/master/src/stream_wrap.cc 数据来了OnRead() 数据读完后MakeCallback(),这个过程就是将读取的数据传递给你用on注册的callback,并执行callback。
楼主问的这个问题涉及到js设计模式的pubsub模式 Nodejs的EventEmitter, 就是pubsub的典型栗子 当然你可以自己定义一个。这里写一个很简单的栗子
@struCoder 多谢
http://www.mirana.me/blog/551c3db1e1382344eba6393c 写过分析eventemitter的东西。