gpt4 book ai didi

javascript - 调用堆栈为空时是否执行 node.js 事件的处理程序?

转载 作者:行者123 更新时间:2023-11-30 06:11:14 24 4
gpt4 key购买 nike

之前我一直认为node.js事件相关的代码是异步的。但下面的例子并不坚持这一点:

var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();

emitter.on('foo', function () {
console.log('Foo handler');
});
emitter.emit('foo');

console.log('Synchronous code!');

“foo”事件应该添加到 eventQueue 并在 main 函数之后处理。但是“同步代码”显示在“Foo 处理程序”之前。为什么?

emitter.emit() 引发的事件是否被推送到 Node 中的 eventsQueue?如果不是,哪些是?

最佳答案

引发事件循环。

emitter.onemitter.emit 将在此上下文执行后安排。

就像你在做的那样:

setImmediate(() => console.log('after Sync code in this context'))
console.log('Synchronous code!')

另一个例子

'use strict'

// handlers are executed in the order in which they are registered

console.log('Expected order: 1 2 a c b')

process.on('asd', () => console.log('a'))

function test () {
setTimeout(() => {
process.on('asd', () => console.log('b'))
}, 100)

process.on('asd', () => console.log('c'))

setTimeout(() => {
process.emit('asd')
}, 200)

console.log('2')
}

console.log('1')

test()

关于javascript - 调用堆栈为空时是否执行 node.js 事件的处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58834614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com