【发布时间】:2014-11-23 08:53:32
【问题描述】:
以这段代码为例,其中f 是一个具有事件“主体”的流,它使用m 调用侦听器——它本身就是一个发射事件的流:
f.on('message', function(m) {
m.on('body', function(stream, info) {
var b = '';
stream.on('data', function(d) {
b += d;
});
stream.on('end', function() {
if (/^header/i.test(info.which))
msg.header = Imap.parseHeader(b);
else
msg.body = b;
});
});
m.on('attributes', function(attrs) {
msg.attrs = attrs;
msg.contentType = partID[1];
});
});
f.on('end', function() {
if (hadErr)
return;
cb(undefined, msg);
});
后端正在发出一个“消息”事件,并传递给它一个m 对象。然后代码监听事件body 和attributes。这一切都很简单,只是我的小脑袋有点危机(我不习惯处理流)。特别是:后端如何从f 和m 对象发出,以保证事件确实在正确的时间被调用?
具体来说:
- 一般而言,必须如何编码
f,以确保mm 在调用m.on('body', function(stream, info) {之前不会发出? - 是否需要在发出事件之前使用 on() 添加侦听器 以便捕获它?
- 如果是这样,这是否意味着
f和m将在此处的代码注册之后发出事件? - 如果后端应该保证
b.emit('end')被调用在 m.emit('end') 之后,那怎么可能真的发生,仍然保证on()被调用before发出任何事件?
好的,我对这件事感到 100% 的困惑。我显然错过了一些基本和关键的东西,因此我什至无法提出正确的问题......! (道歉)
【问题讨论】:
标签: node.js events eventemitter