我对某些术语感到困惑。我试图找出 Node.js 的事件系统实际上是如何工作的,并且在很多地方我读到事件处理程序是完全同步的。
对我来说,这似乎很奇怪,因为使用事件驱动方法的优点之一是主线程不会被事件阻塞。所以我试着想出我自己的例子,看起来发生的事情正是我真正期望的:
const fs = require('fs')
const util = require('util')
const readFile = util.promisify(fs.readFile)
const events = require('events')
const emitter = new events.EventEmitter()
emitter.on('fire', () => {
readFile('bigFile.txt')
.then(() => console.log('Done reading bigFile.txt'))
.catch(error => console.log(error))
console.log('Sync thing in handler')
})
emitter.on('fire', () => {
console.log('Second handler')
})
console.log('First outside')
emitter.emit('fire')
console.log('Last outside')
请注意,bigFile.txt实际上是一个很大的文本文件,在我的计算机上处理它需要几百毫秒。
这里我首先同步注销“Firstoutside”。然后我引发启动事件处理过程的事件。事件处理程序似乎确实是异步的,因为即使我们首先注销同步“处理程序中的同步内容”文本,我们也会开始在后台使用线程池来返回稍后读取文件的结果。运行第一个处理程序后,第二个处理程序运行并打印其消息,最后我们打印出最后一条同步消息“最后一个外部”。
因此,我开始尝试证明一些人所说的,即事件处理程序本质上是同步的,然后我发现它们是异步的。我最好的猜测是,要么人们说事件系统是同步的意味着其他意思,要么我有一些概念上的误解。请帮我理解这个问题!
哈士奇WWW
相关分类