js中 forEach循环异步任务的执行顺序

阅读数:90 评论数:0

跳转到新版页面

分类

html/css/js

正文

<script>
    let promiseTask = (num) => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log(num * num);
                resolve(true);
            }, 1000);
        })
    }

    const task = [1, 2, 3];

    async function DoTaskByForEach() {
        await task.forEach((g) => {
            promiseTask(g);
        });
    }

    // DoTaskByForEach(); // 并发执行

    async function DoTaskByForLength() {
        for (let i = 0; i < task.length; i++) {
            await promiseTask(task[i]);
        }
    }

    // DoTaskByForLength(); // 按顺序执行

    async function DoTaskByForOf() {
        for (let item of task) {
            await promiseTask(item);
        }
    }

    DoTaskByForOf(); // 按顺序执行


</script>
  1. forEach 不会按顺序执行 而是并发执行异步任务
  2. for of 和 普通的for循环却能顺序执行异步任务



相关推荐

一、script标签属性 async 表示立即下载该脚本,但不妨碍页面中的其他操作,只对外部文件有效。 charset 与src属性一起使用,告诉浏览器用来编码这个javascript程序的

ECMAscript 5添加了第二种运行模式:严格模式(strict mode)。 //针对单个脚本 <script>   "use strict";   console.log("这是严格模式

Javascript中, !表示运算符"非", 如果变量不是布尔类型, 会将变量自动转化为布尔类型

一、基本用法 Object.assign方法用于对象的合并,将源对象的所有可枚举属性复制目标对象。 <

一、forEach 如果不做特殊处理,一般情况下,不会break的。如果需要中途跳出循环,建议直接用for语句。 let arr = [1,2,3,4,5]; arr.forEach((item,in

一、window对象 在javascript中,一个浏览器窗口就是一个window对象,window对象以及这些子对象,由于都是用于操作浏览器窗口,所以我们又称为BOM(Browser Object

Math.random()方法会返回介于0(包含)~1(不包含)之间的一个随机数。 舍掉小数点后的数值的方法有很多,如parseInt(),Math.ceil(),Math.flo

一、概述 所有语言中的代理,其本实现的是对原对象的操作的拦截和一些自定义行为。 二、语法  const p = new Proxy(target, handler) 1、target 可以是任何类型的

一、概述 函数实际上是对象,每个函数都是Function类型的实例,而且与其他引用类型一样具有属性和方法,因此函数名实际上也是一个指向函数对象的指针,因为函数名是指针,所以js没有函数重载。 func

navigator.language 属性返回一个表示浏览器当前语言环境的字符串,通常是一个 BCP 47 语言标签。这个语言标签由两个部分组成:语言代码和可选的地区代码。 下面是一个示例代码,展示了