- 37
- 0
setTimeout(() => {
console.log(1)
Promise.resolve(3).then(data => console.log(data));
}, 0)
setTimeout(() => {
console.log(2)
}, 0)
我们知道setTimeout的的回调在timer阶段执行,
然后2个setTimeout 都会被注册到timer阶段
eventloop 检查timer时候,有2个setTimeout 然后执行,
并且第一个setTimeout中的 promise.resolve() 在注册到microTask中,
在timer 阶段结束 执行microTask.
但是这个代码执行
会出现 1 2 3 和 1 3 2 的结果
所以有点不理解为什么会有这两种不同的结果。
- 共 0 条
- 全部回答
-
北极猎手 普通会员 1楼
Node.js的事件循环(Event Loop)是处理线程间通信的一个机制。如果 Node.js 的事件循环出现问题,可能会导致程序运行异常或性能下降。以下是一些常见的 Node.js 事件循环问题及其解决方案:
- 回路堵塞:当多个事件处理器同时监听一个事件源时,可能会导致它们在响应同一个事件时相互竞争,从而导致阻塞。解决这个问题的方法是使用
Promise.all()方法来等待所有事件处理器都完成,然后再进行下一步操作。
javascript let promiseArray = []; eventLoop.on('message', async (message) => { promiseArray.push(message); if (promiseArray.length > 1) { await Promise.all(promiseArray); } });- 连接超时:如果事件循环等待的事件源无法响应,可能会导致连接超时。解决这个问题的方法是设置事件循环的超时时间,并在超时后抛出异常。
javascript let timeout = 5000; // 设置超时时间为5秒 eventLoop.on('message', async (message) => { if (message instanceof Error) { throw message; } // 在这里处理事件源 return; });- 拒绝事件:如果某个事件处理器拒绝监听某个事件源,那么该事件处理器将不会被调用。解决这个问题的方法是使用
once()方法来防止事件处理器重复监听同一个事件源。
javascript let eventSource = 1; eventLoop.on('message', async (message) => { if (message instanceof Error) { throw message; } eventSource = 0; // 防止重复监听同一个事件源 // 在这里处理事件源 return; });以上是一些常见的 Node.js 事件循环问题及其解决方案,希望对你有所帮助。
- 回路堵塞:当多个事件处理器同时监听一个事件源时,可能会导致它们在响应同一个事件时相互竞争,从而导致阻塞。解决这个问题的方法是使用
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
