简述以下代码的输出结果,并解释执行过程:
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/awaitnexttick 队列EventEmitter最后,这真的不算八股,AI 当然可以解释清楚,但这么一段简单清晰的代码,你还不知所以然的话,那对着 Vibe Coding 出来的屎山,最后只能束手无策了。
1
Zhuzhuchenyan 3 小时 49 分钟前 哈哈,这不是几年前我校招的时候面试官最“喜欢”的面试题嘛
看我随手出一道,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); |
2
craftsmanship 3 小时 48 分钟前 via Android
@Zhuzhuchenyan 🆘啊
|
3
lqm 3 小时 44 分钟前
AI 既然清清楚楚,那怎么会堆出类似错误的屎山
|
4
tearnarry 3 小时 39 分钟前
既然 AI 可以解释清楚
1. 不会 Vibe Coding 出来屎山 2. 如果有 Vibe Coding 出来的屎山,继续让 AI 修复即可 |
5
4seasons 3 小时 35 分钟前
@Zhuzhuchenyan 这个玩意儿我寻思着真的有人能分析出来吗?
|
6
lanced 2 小时 16 分钟前
@Zhuzhuchenyan 太经典了
|
7
wuxilaoshiren 2 小时 13 分钟前
典典典 前些年面试就喜欢问这个
但是随着 AI 的到来,感觉看这些都没意义了 |
8
ssssiiiirren 2 小时 13 分钟前
哥们你这题目出的有问题,你这程序但凡要能运行的下去,就必须先打印 42 ,然后后面就能推出来了。
如果不先打印 42 ,await 那里就卡住了。 |
9
chenluo0429 1 小时 48 分钟前 via Android
我面试的时候从来不会问这些。一个合格的开发应当知道一些会引发典型的回调/异步等时序难以确定的场景,然后在正常的开发过程中,别这么用他们
|
10
Ketteiron 1 小时 31 分钟前
我说个暴论,凡是用得上 EventEmitter 的项目,99%是屎山
|
11
SanjinGG 57 分钟前
能出现这种代码的公司还有必要去?
|