当前位置: 首页 > ds >正文

foreach中使用await的问题

目录

1.说明

2.示例

3.解决方案


1.说明

在foreach中调用异步方法,即使使用了await,不会依次执行每个异步任务,也就是说Array.prototype.forEach不会等待 Promise 完成,即使你在回调函数中返回一个 Promise,forEach 也会继续执行下一个元素,而不会等待前一个 Promise 解决(resolve)。 只是按照顺序启动了所有的异步任务

2.示例

function asyncAll() {let  arrs = []arrs.push(5000)arrs.push(4000)arrs.push(3000)arrs.push(2000)arrs.push(1000)arrs.forEach(async (item) => {console.log('在执行结果之前,'+ item)const res = await async2(item)console.log(res)console.log('在执行结果之后,'+ item)})console.log("所有的都执行完成")
}

async2是一个异步方法,返回promise,执行结果如下:

在执行结果之前,5000
在执行结果之前,4000
在执行结果之前,3000
在执行结果之前,2000
在执行结果之前,1000
所有的都执行完成
1000
在执行结果之后,1000
2000
在执行结果之后,2000
3000
在执行结果之后,3000
4000
在执行结果之后,4000
5000
在执行结果之后,5000

按照顺序启动了任务,但实际却是最后一个任务先执行完成,第一个任务最后执行完成;并且foreach中的任务没有执行完成就执行了foreach后面的处理。

3.解决方案

①使用for of循环,异步任务会按照顺序依次执行

②如果异步任务之间没有明确的顺序,可以使用promise all处理,循环将每个异步任务放在任务数组中,使用promise.all同时执行所有的异步任务,在then处理中可以获取所有异步任务的结果,然后进行后续的处理,这样可以确保异步任务和后续处理的顺序

http://www.xdnf.cn/news/6788.html

相关文章:

  • 【AI】用Dify实现一个模拟面试的功能
  • SD2351核心板:开启AI视觉普惠化新时代
  • AI 算力革命:算力的未来趋势
  • idea中Lombok失效的解决方案
  • 第31节:迁移学习概念
  • 2025年PMP 学习十五 第10章 项目资源管理
  • 应用层DDoS防护:从请求特征到行为链分析
  • 单例模式(Singleton Pattern)详解
  • 线程池设计
  • 码蹄集——圆包含
  • GraphPad Prism项目的管理
  • 兼容性测试的方法与实践要点
  • Qwen3技术报告
  • Axure疑难杂症:剖析面包屑导航“用户不迷路”(玩转导航)
  • 华为云Flexus+DeepSeek征文|基于Dify平台tiktok音乐领域热门短视频分析Ai agent
  • Unity雷火UX工具插件中的本地化功能(Unity项目中文字图片多语言功能)
  • Feign异步模式丢失上下文问题
  • 云轴科技ZStack官网上线Support AI,智能助手助力高效技术支持
  • 如何用PDO实现安全的数据库操作:避免SQL注入
  • GTS-400 系列运动控制器板卡介绍(三十三)---运动程序单线程累加求和
  • 【漫话机器学习系列】262.交叉项(Interaction Term)
  • redisson基础
  • 云基内容中台构建企业智慧实践
  • Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD
  • 数据如何驱动互联网一体化发展?
  • 大模型——Crawl4AI使用JsonCssExtractionStrategy进行结构化数据提取
  • 【专利信息服务平台-注册/登录安全分析报告】
  • 如何通过URL链接让亚马逊网站返回指定像素大小的产品主图片
  • 今日积累:若依框架配置QQ邮箱,来发邮件,注册账号使用
  • 香橙派Zero3跨网络音乐服务系统搭建与内网穿透技术应用实践