分享一道 Node.js 的面试题,考察 JS 相关的最基本的掌握程度,代码完全来自官方文档
简述以下代码的输出结果,并解释执行过程:
import { once, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
process.nextTick(() => {
ee.emit('myevent', 42);
});
const [value] = await once(ee, 'myevent');
console.log(value);
const err = new Error('kaboom');
process.nextTick(() => {
ee.emit('error', err);
});
try {
await once(ee, 'myevent');
} catch (err) {
console.error('error happened', err);
}
以上代码来自这里
里面涉及到的基础知识点有:
Promiseasync/await- Node.js 中的微任务队列与
nexttick队列 - CJS 与 MJS 的差异
- Node.js 中的
EventEmitter
最后,这真的不算八股,AI 当然可以解释清楚,但这么一段简单清晰的代码,你还不知所以然的话,那对着 Vibe Coding 出来的屎山,最后只能束手无策了。