forEach 和 for...of... 在遍历内部存在异步操作的区别

起先是因为一段代码:

js 复制代码
const formatUserInfo = async (id) => {
  const result = await getUserInfoByIdAPI(id)
  return result.data.data
}
const getReturnSchoolInfoList = async () => {
  const result = await getReturnSchoolInfoListAPI(page.value, limit.value)
  count.value = result.data.data.count
  returnSchoolInfoList.value = result.data.data.rows
  // todo 根据userId 获取用户信息 并与返校信息合并
  returnSchoolInfoList.value.forEach(item => {
    const result1 = await formatUserInfo(item.userId)
    console.log(result1)
    item.userInfo = result1
  })
  console.log(returnSchoolInfoList.value)
}

然后报错: [vite] Internal server error: [vue/compiler-sfc] Unexpected reserved word 'await'.。

如果去掉 await ,那么由于是异步操作会先输出 returnSchoolInfoList.value,再输出 result1,并且因为赋值的时候并没有获取到result1 的具体值,所以需等待该异步操作完成后再进行赋值。

然后幸好有 Webstorm 的智能提示,让我使用 for...of... 代替 forEach,bug 果然消失了 !

js 复制代码
const formatUserInfo = async (id) => {
  const result = await getUserInfoByIdAPI(id)
  return result.data.data
}
const getReturnSchoolInfoList = async () => {
  const result = await getReturnSchoolInfoListAPI(page.value, limit.value)
  count.value = result.data.data.count
  returnSchoolInfoList.value = result.data.data.rows
  // todo 根据userId 获取用户信息 并与返校信息合并
  for (const item of returnSchoolInfoList.value) {
    const result1 = await formatUserInfo(item.userId)
    console.log(result1)
    item.userInfo = result1
  }
  console.log(returnSchoolInfoList.value)
}

并且等待异步完成后,正确赋值了!

相关推荐
@大迁世界3 分钟前
1.什么是 ReactJS?
前端·javascript·react.js·前端框架·ecmascript
BJ-Giser1 小时前
Cesium 基于EZ-Tree的植被效果
前端·可视化·cesium
王码码20352 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
发现一只大呆瓜2 小时前
深入浅出 AST:解密 Vite、Babel编译的底层“黑盒”
前端·面试·vite
天天鸭2 小时前
前端仔写了个 AI Agent,才发现大模型只干了 10% 的活
前端·python·ai编程
发现一只大呆瓜2 小时前
前端模块化:CommonJS、AMD、ES Module三大规范全解析
前端·面试·vite
IT_陈寒2 小时前
一文搞懂JavaScript的核心概念
前端·人工智能·后端
IT_陈寒2 小时前
Java开发者必看!5个提升开发效率的隐藏技巧,你用过几个?
前端·人工智能·后端
前端Hardy3 小时前
Wails v3 正式发布:用 Go 写桌面应用,体积仅 12MB,性能飙升 40%!
前端·javascript·go
Highcharts.js3 小时前
Highcharts React v4 迁移指南(下):分步代码示例与常见问题解决
javascript·react.js·typescript·react·highcharts·代码示例·v4迁移