新手求助:关于EventEmitter
最近在看events,按照我的理解emit应该是异步的,但是写了一段代码,发现运行结果和理解的不一样。希望大神帮帮我。
const EventEmitter = require('events');
class Test extends EventEmitter{
constructor(){
super();
this.flag = false;
this.on('evt', (data)=>{
let d = new Date().getTime() + 10000;
while(d > new Date().getTime()){}
console.info(data);
this.flag = true;
});
}
async excute(){
console.info('excute start');
let a = await new Promise((resolve)=>{
setTimeout(()=>{
resolve('setTimeout');
}, 5000);
});
console.info(a);
this.emit('evt', 'send evt');
console.info('this flag=%s', this.flag);
}
}
const test = new Test;
test.excute();
以上代码,按照我的理解,输出excute start --》setTimeout–》send evt–》this flag=true (setTimeout 和 send evt两者的顺序不分先后); 但是在运行过程中发现setTimeout好像一直在send evt的前面。
有大神知道这是为什么吗?小白求指导,谢谢。
5 回复
- 代碼块可以编辑下方便阅读
- emit 是同步的
来自酷炫的 CNodeMD
EventEmitter是同步的,只是个观察者模式
代碼块可以编辑下方便阅读
@brucecodezone @hyj1991 非常感谢!
事件 !== 异步, 只是一个事件发布/订阅模式