Promise 未 await
快速摘要
你调用了一个 `async` 函数却忘了 `await`,于是拿到的是一个 Promise 对象,而不是真正的结果,后续逻辑全部错乱。
为什么发生
调用
async函数时漏写await在非
async函数里调用async函数却没用.then()处理在
forEach回调里用await(forEach不会等待)
最小示例
✗ 错误代码
async function fetchUser() {
return { name: "Alice" };
}
const user = fetchUser();
console.log(user.name);✓ 修复代码
async function fetchUser() {
return { name: "Alice" };
}
const user = await fetchUser();
console.log(user.name);没加 await 时 user 是 Promise,没有 name 属性。加 await 后 user 才是真正的对象。
如何诊断
检查结果是否是
[object Promise]或打印出来是 Promise 对象确认调用
async函数的位置是否用了await在
forEach中改用for...of循环来支持await
如何修复
在调用前加
await,并把外层函数标记为async用
.then()链处理 Promise 结果把
forEach改成for...of或Promise.all+map
如何预防
启用 ESLint
require-await和no-async-promise-executor规则对异步函数统一用
async/await风格,避免混用.then