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

查看 38|回复 3
作者:superhot   
简述以下代码的输出结果,并解释执行过程:
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);
}
以上代码来自这里
里面涉及到的基础知识点有:
[ol]
  • Promise
  • async/await
  • Node.js 中的微任务队列与 nexttick 队列
  • CJS 与 MJS 的差异
  • Node.js 中的 EventEmitter
    [/ol]
    最后,这真的不算八股,AI 当然可以解释清楚,但这么一段简单清晰的代码,你还不知所以然的话,那对着 Vibe Coding 出来的屎山,最后只能束手无策了。

    EventEmitter, promise

  • Zhuzhuchenyan   
    哈哈,这不是几年前我校招的时候面试官最“喜欢”的面试题嘛
    看我随手出一道,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   
    @Zhuzhuchenyan 🆘啊
    lqm   
    AI 既然清清楚楚,那怎么会堆出类似错误的屎山
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部