新手求助:关于EventEmitter - CNode技术社区

新手求助:关于EventEmitter
发布于 8 年前 作者 sevenzhou1218 3279 次浏览 来自 问答

最近在看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 回复
  1. 代碼块可以编辑下方便阅读
  2. emit 是同步的

来自酷炫的 CNodeMD

EventEmitter是同步的,只是个观察者模式

代碼块可以编辑下方便阅读

事件 !== 异步, 只是一个事件发布/订阅模式

回到顶部

AltStyle によって変換されたページ (->オリジナル) /