Javascript中forEach的异步问题

某天尝试了下在 forEach函数中调用 await Promise() 方法,如下:

var arr = [1,2,3]

arr.forEach(async (v,i,a)=>{

  await Promise()

})

发现并没有按照想象中等到上一个Promise 处理完成后再执行下个Promise。

经过查阅资料后发现,实际forEach函数内部是异步的,遇到这种问题请使用for循环,如下:

var arr = [1,2,3]

for(let i=0;i<arr.length;i++){

  await Promise()

}

即可解决问题,具体原理待下次补充

原文地址:https://www.cnblogs.com/gs456/p/11002162.html

时间: 2024-11-09 10:16:51

Javascript中forEach的异步问题的相关文章

JavaScript中foreach、map函数

语法:forEach和map都支持2个参数:一个是回调函数(item,index,input)和上下文: ?forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: ?数组中有几项,那么传递进去的匿名回调函数就需要执行几次: ?每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当前项的索引index,原始数组input: ?理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改:但是我们可以自己通过数组的索引来修改原

浅谈JavaScript中forEach与each

forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: var arr = [1,2,3,4]; arr.forEach(alert); 等价于: var arr = [1, 2, 3, 4]; for (var k = 0, length = arr.length; k < length; k++) { alert(array[k]); } forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三个参数是数组本身 因此:

【转】浅谈JavaScript中forEach与each

forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: 1 var arr = [1,2,3,4]; 2 arr.forEach(alert); 等价于: 1 var arr = [1, 2, 3, 4]; 2 for (var k = 0, length = arr.length; k < length; k++) { 3 alert(array[k]); 4 } forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三

javascript 中forEach,for in循环的用法

for循环遍历 let array = ['a','b','c']; for (let i = 0;i < array.length;i++){ console.log(array1[i]); // a b c } 用for in的方遍历数组 for(let index in array) { console.log(index,array[index]); }; JavaScript 提供了 foreach()  map() 两个可遍历 Array对象的方 forEach和map用法类似,都可

学习JavaScript中的异步Generator

本文和大家分享的主要是javascript中异步Generator相关内容,一起来看看吧,希望对大家学习javascript 有所帮助. 异步的generators和异步iteration已经到来 ! 这是错误的, 它们现在还在 阶段 3 ,这表示他们很有可能在JavaScript未来的一个版本中发布. 在他们发布之前,你可以通过 Babel 来在你的项目中使用还在阶段3的建议内容. 网站基本上还是一些分散运行的应用,因为任何在语言上的修改都会造成永久的影响,所以所有的未来的版本都需要向后兼容.

JavaScript中异步编程

一 关于事件的异步 事件是JavaScript中最重要的一个特征,nodejs就是利用js这一异步而设计出来的.所以这里讲一下事件机制. 在一个js文件中,如果要运行某一个函数,有2中手段,一个就是直接调用,比如foo(),第二就是利用事件来触发,这中函数也叫回调函数,比如传递给setTimeout函数和onready属性. 1.setTimeout函数中的事件异步 setTimeout本质上也是一种异步事件,当延迟时间到的时候触发该事件,但是有的有的时候(其实也是大部分时候)都不会按照给定的延

Javascript中的异步

在C#,Java中,异步方法,通常是伴随多线程,并发等术语一起出现的,比如C#中的async方法,是运行在一个线程池线程上,并且在异步方法运行完成后,有一个回调函数通知主线程. 那么由于Javascript是单线程的,它的异步又是怎么解释的? 首先对异步方法给一个定义,什么样的方法算是异步方法.我认为异步方法最主要有2点,一个是不阻塞当前代码的执行,另一个是有回调方法.即异步方法运行完可以通知主线程. 事实上,当说起Javascript的异步时,不要忽略了,Javascript中其实有2种异步,

javascript中for、each以及foreach的效率对比

今天同事说js的前端中for的效率比较高,自己不信,因为我记得php中foreach的效率比for的效率高,然后自己做了一个测试,如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Conte

理解和使用 JavaScript 中的回调函数

原文:http://javascriptissexy.com/ 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实际上是一种对象,它可以"存储在变量中,通过参数传递给(别一个)函数(function),在函数内部创建,从函数中返回结果值". 因为function是内置对象,我们可以将它作为参数传递给另一个函数,延迟到函数中执行,甚至执行后