GoForum🌐 V2EX

分享一道 Node.js 的面试题,考察 JS 相关的最基本的掌握程度,代码完全来自官方文档

superhot · 2026-01-15 17:03 · 0 次点赞 · 2 条回复

简述以下代码的输出结果,并解释执行过程:

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);
}

以上代码来自这里

里面涉及到的基础知识点有:

  1. Promise
  2. async/await
  3. Node.js 中的微任务队列与 nexttick 队列
  4. CJS 与 MJS 的差异
  5. Node.js 中的 EventEmitter

最后,这真的不算八股,AI 当然可以解释清楚,但这么一段简单清晰的代码,你还不知所以然的话,那对着 Vibe Coding 出来的屎山,最后只能束手无策了。

2 条回复
Zhuzhuchenyan · 2026-01-15 17:23
#1

哈哈,这不是几年前我校招的时候面试官最“喜欢”的面试题嘛

看我随手出一道,console.log 1234 才是味道最足的

console.log(1); setTimeout(() => console.log(2), 0); process.nextTick(() => {

console.log(3);
queueMicrotask(() => console.log(4));

});

queueMicrotask(() => {

console.log(5);
process.nextTick(() => console.log(6));

}); new Promise(resolve => {

console.log(7);
resolve();
console.log(8);

}).then(() => {

console.log(9);
process.nextTick(() => console.log(10));
queueMicrotask(() => console.log(11));

});

new Promise(resolve => {

console.log(12);
setTimeout(() => {
    console.log(13);
    resolve();
}, 0);

}).then(() => {

console.log(14);

});

(async () => {

console.log(15);
await void 0;
console.log(16);
process.nextTick(() => console.log(17));
queueMicrotask(() => console.log(18));

})();

console.log(19);

craftsmanship · 2026-01-15 17:23
#2
添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: superhot
发布: 2026-01-15
点赞: 0
回复: 0