-
我写的 JS 里 setTimeout、Promise 和同步代码混在一起,打印顺序完全不按我写的来,Promise 居然比 setTimeout 先跑,我对着事件循环排查了大半天的复盘
我写了段混着同步代码、setTimeout、Promise.then 的逻辑,以为按从上到下书写顺序执行,结果打印顺序大跌眼镜:同步代码先全跑完,写在后面的 Promise.then 竟比写在前面、延迟为0的 setTimeout 先执行,依赖顺序的逻辑全乱了。深挖才懂是 JS 的事件循环:JS 单线程,执行规则是同步代码先跑完→清空整个微任务队列(Promise.then/await后/queu…- 0
- 0
-
"全部保存完成"先打印了出来,可数据库里一条都还没存:我在 forEach 里用 async/await 踩的那个坑的踩坑复盘
遍历数组异步保存每一项、全部存完再打印"全部保存完成"——结果"全部保存完成"先打印了,数据库里却一条都还没存,而且某项失败抛的异常 try/catch 还捕获不到。根因是 Array.prototype.forEach 根本不认识、也不等待 async 回调返回的 Promise:它只是飞快地把每项的异步操作启动一遍就立刻返回。这篇从 forEach 为何…- 0
- 0
-
日志说完成数据却没动:forEach 异步陷阱避坑复盘
那次事故的现象一开始把整个团队都看懵了:一个跑批量数据处理的 Node.js 脚本,日志里明明白白打着全部处理完成共5000条,可数据库里实际被更新的却总是只有零星几十条,而且每次跑数量还不一样,脚本没报任何错退出码是0,一副我成功了的样子。一个声称自己全部完成、还没报错的程序,干的活却只有它声称的零头,这种嘴上说着完成了手上啥也没干完的诡异排查起来格外抓狂,连个错误堆栈都没有无从下手。查到最后根…- 0
- 0
异步
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



