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循环无法直接处理异步任务,容易导致结果的混乱。

相关推荐
葡萄城技术团队5 分钟前
一键触发工作表中所有异步函数:用依赖单元格刷新 SpreadJS 公式
前端
lsylalalala9 分钟前
多线程(4)
java·开发语言·多线程
小白不想画工图10 分钟前
银河麒麟V10系统安装QT5.12
linux·开发语言·qt·银河麒麟
Bigger10 分钟前
谁动了我的 URL?——记一次微前端"灵异 Bug"的排查实录
前端·ai编程·vue-router
JavaGuide18 分钟前
轻量开源版 IDEA 来了!
前端·后端
2601_9620974822 分钟前
JavaScript 异步编程
javascript·ajax·回调函数·异步编程·子线程
张洪权27 分钟前
nest.js websocket 群聊----私聊功能
前端·nestjs
流光D33 分钟前
AI Era: Building Web Sites and Configuring Nginx Reverse Proxy Process
前端·人工智能·nginx
sakidd33 分钟前
VS Code 的 AI Chat 现在已经这么能干了?
前端
计算机魔术师41 分钟前
英伟达砸130亿美元买下一个平台,黄仁勋到底在怕什么?
前端