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

最近在看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是同步的,只是个观察者模式

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

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

回到顶部