我對某些術語感到困惑。我試圖找出 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”。然后我引發啟動事件處理過程的事件。事件處理程序似乎確實是異步的,因為即使我們首先注銷同步“處理程序中的同步內容”文本,我們也會開始在后臺使用線程池來返回稍后讀取文件的結果。運行第一個處理程序后,第二個處理程序運行并打印其消息,最后我們打印出最后一條同步消息“最后一個外部”。因此,我開始嘗試證明一些人所說的,即事件處理程序本質上是同步的,然后我發現它們是異步的。我最好的猜測是,要么人們說事件系統是同步的意味著其他意思,要么我有一些概念上的誤解。請幫我理解這個問題!
所有事件處理程序同步觸發是什么意思?
不負相思意
2023-09-14 18:19:11