You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript async/await执行顺序问题:forEach后数组输出为空如何解决

问题根因

你当前遇到的执行顺序问题核心原因是:Array.prototype.forEach 不支持等待异步回调执行完成。你传入forEach的async函数返回的Promise会被直接忽略,forEach只会同步触发所有异步任务,不会等待任何异步逻辑执行完毕就会继续执行后续的外部打印代码,所以才会出现外部打印先执行、数组为空的情况。

解决方案

将forEach替换为map收集所有异步任务的Promise,再通过Promise.all等待所有异步任务全部执行完成后,再执行外部打印逻辑。注意需要将当前外层作用域改为async函数,才能使用await语法。

修改后的代码示例
// 外层作用域必须是async函数,比如:
async function yourFunctionName() {
  const arrayTracker = []
  const response = [] // 你的原始数据源

  // 用map替换forEach,收集所有异步任务的Promise
  const promises = response.map(async (element: any) => {
    const formatJson = JSON.parse(element[1])

    if (formatJson !== null) {
      const dayDifference = daysDiff(formatJson.closedTimeStamp, Date.now())
      if (dayDifference > 7) {
        arrayTracker.push(formatJson)
      }
    } else {
      if (element[0] === '@notify_1_2') {
        // @ts-ignore
        async function checkStorage() {
          const json = await AsyncStorage.getItem('@alarm')
          const response = JSON.parse(json!)

          let dayDifference: any
          if (json !== null) {
            dayDifference = daysDiff(response, Date.now())
          }

          if (dayDifference > 7 || dayDifference == null) {
            return { id: 1, priority: 1 }
          }
        }

        arrayTracker.push(await checkStorage())
        console.log('array tracker below push:', arrayTracker)
      } else {
        arrayTracker.push({ id: 0, priority: 0 })
      }
    }
  })

  // 等待所有异步任务执行完成
  await Promise.all(promises)
  // 此时arrayTracker已经填充完成,打印结果符合预期
  console.log('array tracker outside function:', arrayTracker)
}

如果外层作用域无法改为async函数,可以用Promise.all的then回调处理后续逻辑:

Promise.all(promises).then(() => {
  console.log('array tracker outside function:', arrayTracker)
})
补充说明

这个修改方案可以保证所有异步存储读取、日期校验、数组push操作全部执行完成后,才会执行外部的打印逻辑,输出顺序和结果完全符合你的预期。

内容的提问来源于stack exchange,提问作者nikomannelig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 00:15:08