js在处理异步任务时,forEach和for...of循环之间的区别

先看效果

forEach循环:

1、forEach是数组的原生方法,用于遍历数组。

2、它无法直接处理异步任务,因为它不会等待每个任务的完成,而是立即执行下一个任务。

3、这意味着如果在forEach循环中执行异步任务,它们将会同时进行,可能导致结果的顺序混乱或出现其他问题。

示例:

javascript 复制代码
    const getVideoResolutionRatio = (val) => {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(val * 2);
        }, 1200)
      });
    }
    
    const getValueForEach = async () => {
      const videoFiles = [1, 2, 3];
      let tempList = [];
      videoFiles.forEach(async (item) => {
        let reslut = await getVideoResolutionRatio(item);
        tempList.push(reslut);
      })
      return tempList
    }
     // ForEach获取值:
    const testForEach = async () => {
      let test = await getValueForEach()
      console.log(test);
    }
    testForEach() //输出[]

在上述示例中,异步任务asyncTask被放在forEach循环中。由于forEach不会等待异步任务的完成。

for...of循环:

for...of循环是ES6引入的一种遍历方式,可以用于遍历可迭代对象(如数组、字符串、Set、Map等)。

它支持await关键字,可以在循环体中等待异步任务的完成。

for...of循环会按照顺序依次处理每个异步任务,等待上一个任务完成后再执行下一个任务。

示例:

javascript 复制代码
    const getVideoResolutionRatio = (val) => {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(val * 2);
        }, 1200)
      });
    }

    const getValueForOf = async () => {
      const videoFiles = [1, 2, 3];
      let tempList = [];
      for (const item of videoFiles) {
        let reslut = await getVideoResolutionRatio(item);
        tempList.push(reslut);
      }
      return tempList
    }


    // ForOf获取值:
    const testForOf = async () => {
      let test = await getValueForOf()
      console.log(test);
    }
    testForOf() //输入[2, 4, 6]

在上述示例中,使用了for...of循环来遍历数组,并在循环体中使用await关键字等待异步任务的完成。这样可以保证按照数组的顺序依次输出结果。

总结:,for...of循环在处理异步任务时更加可靠,可以控制任务的顺序和流程,而forEach循环无法直接处理异步任务,容易导致结果的混乱。

相关推荐
前端AK君5 分钟前
React中台系统如何嵌入到业务系统中
前端
Slice_cy6 分钟前
不定高虚拟列表
前端
前端AK君15 分钟前
React组件库如何在vue项目中使用
前端
Moonbit25 分钟前
MoonBit 再次走进清华:张宏波受邀参加「思源计划」与「程序设计训练课」
前端·后端·编程语言
RestCloud28 分钟前
一站式数据集成:iPaaS 如何让开发者和业务人员都满意?
前端·后端·架构
wanzhong233337 分钟前
学习triton-第1课 向量加法
开发语言·python·高性能计算
li357439 分钟前
React 核心 Hook 与冷门技巧:useReducer、useEffect、useRef 及 is 属性全解析
前端·javascript·react.js
菜市口的跳脚长颌42 分钟前
Web3 基础
前端
快乐是Happy43 分钟前
分享一个非常实用的防止重复提交操作
前端·javascript
王蛋11143 分钟前
前端工作问题或知识记录
前端·npm·node.js