记一次在forEach中使用aynac/await中的坑
1.背景
在写一个对齐脚本时 发现下列问题
const timeList = await imageList.map( (item,index)=>{
return item.identify_border(start_time, end_time)
})
// timeList = [Promise,Promise,Promise,Promise] 取不到timeList中的值
so 用普通的for循环试了一遍
const timeList = []
for(let i=0;i<imageList.length;i++){
const time =await imageList[i].identify_border(start_time, end_time)
timeList.push(time)
}
// timeList = [ { },{ },{ },{ },{ } ] 能取到timeList中的值
2.为什么出现这个问题
- 原因是forEach遍历,仅仅是短时间内连续发起了多个请求,对于某一次请求有等待过程,但对于整体的多次请求是没有作用的 ,也就是async await仅仅作用于某一次请求的处理过程中,并不作用于所有请求的先后顺序。
- 贴上chatGPT的回答

3.延伸问题:JavaScript 中,为什么数组.map循环中可以使用async/await,而数组.forEach中不可以使用async/await?
- Array.map 和 Array.forEach 是 JavaScript 中的两种不同的数组循环方法。Array.map 方法会映射数组的每个元素,并返回一个新的数组,其中包含映射函数的结果。相反,Array.forEach 方法只是遍历数组中的每个元素,不会返回任何结果。因为 Array.map 方法会返回新数组,所以可以使用 async/await 来等待异步操作完成,并在映射数组中获取结果
例如 map中使用:
async function processArray(array) {
return await Promise.all(array.map(async item => {
const result = await someAsyncOperation(item);
return result;
}));
}
记一次在forEach中使用aynac/await中的坑的更多相关文章
- 在vue中使用async/await遇到的坑
最近无聊在搞一些新的东西,今天就遇到一个async/await的坑: 因为我用的不是vue官方的脚手架,所以遇到这样的问题: await is a reserved word 这样的警告,我猜应该是缺 ...
- yii2通过foreach循环遍历在一个用户组中取出id去另一表里查寻信息并且带着信息合并原数组信息---案例
yii2通过foreach循环遍历在一个用户组中取出id去另一表里查寻信息并且带着信息合并元数组信息---案例 public function actionRandomLists(){ //查询到了所 ...
- CUDA常见问题之无法在c文件中调用cu文件中定义的函数
当在C源文件中调用cu文件中定义的函数时,会出现undefined reference的问题,而在C++源文件中调用cu文件中定义的函数时则不会出现这个问题. 出现上述问题的原因是,nvcc编译器采用 ...
- Java中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后在今天使用的时候发现报错了,然后去科普了一下,发现这是一个误区.下面我们来一起看一下. Java中循环遍 ...
- 【Unity】Unity中C#与Android中Java的互相调用遇到的一些问题
1.有关调用的一些问题: (1).在C#中直接调用java中的代码,无返回值: 在java中: public static void setAge(Context context , int leve ...
- unity中ScriptableObject在assetbundle中的加载
转载请标明出处:http://www.cnblogs.com/zblade/ 以前都是写一些个人的调研博客,从今天开始,也写一些个人在开发中遇到的一些可以分享的趟坑博客,为后续的开发人员提供一些绵薄之 ...
- JAVA中循环删除list中元素的方法总结【转】
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
- js循环中使用async/await踩过的坑
最近写koa的时候遇见需要在循环中使用async/await的情况,当然第一反应就是直接上forEach,然后就直接翻车了... 直接上代码: function handleSql(val) { re ...
- JAVA中循环删除list中元素的方法总结(同上篇)
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
- 关于C#中async/await中的异常处理(下)-(转载)
上一篇文章里我们讨论了某些async/await的用法中出现遗漏异常的情况,并且谈到该如何使用WhenAll辅助方法来避免这种情况.WhenAll辅助方法将会汇总一系列的任务对象,一旦其中某个出错,则 ...
随机推荐
- vue后台管理系统——登录/退出功能
电商后台管理系统的功能--登录/退出功能 1. 登录业务流程 ① 在登录页面输入用户名和密码 ② 调用后台接口进行验证 ③ 通过验证之后,根据后台的响应状态跳转到项目主页 2. 登录业务的相关技术点 ...
- SQLite 帮助类
public static class SqliteHelper { /// <summary> /// 获得连接对象 /// </summary> /// <retur ...
- uni-app微信小程序文本框计数功能
<view> <textarea placeholder="请输入" @input="sumfontnum" :maxlength=" ...
- == 和 equal 的区别
== 比较的是两个对象的索引是否相同: equal 比较的是两个对象内容是否相同: int a = 1;long b = 1L;a==b? 答案是 对:因为a和b指向的索引地址相同. 再例如 Stri ...
- FII-PRX100-D开发板FPGA的烧录和RISC-V 软件代码下载
1. 生成*.bit文件之前先RESET结果 首先,打开Vivado FII_RISCV_V2.01工程(这里以V2.01版本为例),如图1所示. 图1 FII_RISCV_V2.01工程 要生成相应 ...
- 2、HTTP的消息格式
概念 HTTP协议 Hyper Text Transfer Protocol 超文本传输协议 传输协议 传输协议定义了客户端和服务器端通信时,发送数据的格式. 特点 基于TCP/IP的高级协议 默认端 ...
- 小白开始成长了+洛谷1488与CF629A Far Relative’s Birthday Cake题解
终于开始我的博客生活了,希望博客可以让我记住学了什么,错了什么,接下来会有什么将出现. 记录写ACM生涯中的一些经验和网工经验吧,如果有人看我博客的话,希望可以留言给我提提意见,指导指导我啦~~~ 正 ...
- JMeter参数化(一)--CSV参数化
一.CSV Data Set Config 1.添加配置元件-CSV Data Set Config 其中,分隔符不能是参数化的值中的符号,否则会被截断. 2.调用 3.循环读取文件中数据 假设数据内 ...
- win10 IE浏览器中,设置指定程序查看源文件,设置查看源默认程序
解决 win10下修改ie默认查看网页源文件程序无效,设置View Source Editor ----> Editor Name注册表项无效 1. 修改注册表 计算机\HKEY_CLASSES ...
- 测试--MD5--加密
CREATE TABLE `test`.`testmd5` ( `id` INT ( 4 ) NOT NULL, `name` VARCHAR ( 20 ) NOT NULL, `pwd` VARCH ...