JavaScript 中 async/await 在 forEach 里不生效的底层原因与正确写法
很多人从 Promise 切到 async/await 之后,会习惯性地把原来 .then() 的写法直接改成 await,但在数组遍历里踩坑的概率非常高。最典型的一幕是:写了一个 async 函数,在 forEach 的回调里 await 某个异步请求,结果发现 forEach 后面的代码先执行了,收集到的结果永远是空的,或者控制台里打印顺序完全乱掉。这不是浏览器 bug,也不是 Node.js 的兼容性问题,而是 forEach 的设计本身就不支持异步流程控制。它只负责同步地把每个元素交给回调,回调返回的 Promise 会被直接丢弃,forEach 不会等它 resolve。文章会从 f...