首页 > 其他分享 >使用forEach循环异步方法,导致使用深拷贝时,得不到最新数据,控制台会打印出最新的数据

使用forEach循环异步方法,导致使用深拷贝时,得不到最新数据,控制台会打印出最新的数据

时间:2024-07-17 11:43:43浏览次数:11  
标签:异步 arr JSON 最新 forEach 使用 控制台

在使用forEach循环遍历一个数组,如果循环时有异步方法,会导致最终深拷贝得不到最新数据,但是控制台会打印最新的数据

const arr = [
      { name: "Jone", age: 18 },
      { name: "Tom", age: 15 },
      { name: "Liu", age: 48 }
    ];

    function funTimeout (param) {
      return new Promise((resolve) => {
        setTimeout(() => { resolve(170) }, 1000)
      })
    };

    function getData () {
      arr.forEach(async (item) => {
        const res = await funTimeout(item);
        item.height = res
      });
      
      console.log(arr, 'arrr');
      console.log(JSON.parse(JSON.stringify(arr)), 'copyArr');
    }
  getData()

上面代码在控制台执行的结果,如图

使用JSON.parse(JSON.stringify())深拷贝后,height属性为追加到arr 数组中。刚开始以为是JSON.parse(JSON.stringify())的原因,还是使用lodash的_.cloneDeep,发现结果是一样的,
最后发现,这是由于forEach不会等待异步方法执行完成,以下是 MDN 的解释

解决方法:
1、使用原始的 for 循环;
2、使用 map 和 promise.all()

这个问题凸显出自己本身Js基本功还不扎实,需要加强练习

标签:异步,arr,JSON,最新,forEach,使用,控制台
From: https://www.cnblogs.com/cola-tian/p/18306957

相关文章

  • setState异步更新数据导致的问题
    背景子组件使用ProDescriptions组件,通过传入columns和request构建列表。<Modalopen={visible}><ProDescriptionscolumns={columnsasany}request={getTableRequestasany}/></Modal>父组件通过调用子组件useImperativeHandle提供的方法,改......
  • 【App渗透】BurpSuite插件-Brida 2024最新自动加解密Custom plugins演示
    文章目录前言一、测试app的客户端和服务端二、BurpSuite设置代理三、反编译apk文件四、编写brida/fridahook脚本五、Customplugins自动加解密六、本期送书《二进制安全基础》如何领书总结前言之前有写过如何安装brida的文章和视频讲解,大家感兴趣的可以看看之前......
  • 异步任务队列
    #周朱张孙宋刘陈"胡王周朱谢周朱刘庄谢.黄"#周朱张孙宋刘陈"./宋周_胡王周朱谢周朱刘庄谢.黄"//#周朱张孙宋刘陈"孙周李袁王郭宋董陈朱.黄"#周朱张孙宋刘陈"赵陈罗曾庄朱罗.黄"#周朱张孙宋刘陈"欧陈朱刘陈郭姜邓曾.黄"#周朱张孙宋刘陈"邓周杨杨蒋胡赵.黄"#周朱张孙宋......
  • 树莓派4b最新系统下CSI摄像头使用
     最新的64位系统下opencv的capture不支持libcamera 直接调用capturevideo运行代码会出现如下报错:    WARN:[email protected]]global./modules/videoio/src/cap_gstreamer.cpp(2401)handleMessageOpenCV|GStreamerwarning:Embeddedvideoplaybackhalted;modulev4......
  • 2024最新版Python安装详细教程!一键安装,永久使用
    打开上面的Python官网地址,如下图所示,鼠标放入网页Downloads栏目,选择里面的windows操作系统。三、进入windows对应的页面,选择python版本(1)选择python的稳定发布版本StableReleases点击进入windows操作系统对应的页面,显示python安装版本,这些python安装版本适合windows操......
  • 基于快照的异步远程复制介绍
    本文分享自天翼云开发者社区《基于快照的异步远程复制介绍》,作者:l****n1、简介:本文介绍了基于RBD快照的异步远程复制技术2、概念介绍:异步远程复制:通过定时的将业务端的数据同步到备份端,从而实现数据的备份和灾难恢复的技术;RBD快照:RBD快照是RBD在某一时刻全部数据的只读镜像......
  • Salesforce业务分析师认证最新考纲,建议收藏!
    Salesforce业务分析师认证考试专为具有Salesforce经验的业务分析师而设计的。业务分析师的工作是为了推动业务改进,并与利益相关者合作以了解客户环境中的业务需求和价值。官方的考试指南指出,备考者需要有2年Salesforce平台经验,2年业务分析师经验,包括成功拥有和交付业务流程改进......
  • StableDiffusion 安装部署教程,轻松上手无压力!(附2024最新SD安装包)
    亲爱的小伙伴们,大家好!今天要给大家分享一个超级实用的SD安装教程,让您轻松开启新的体验之旅!一、SD简介SD是一款功能强大且备受欢迎的软件/工具,它具有的以下功能和优势,能够为您的工作、学习和娱乐带来极大的便利。功能:1.文生图创作-根据输入的文本描述生成逼真或......
  • 2024最新的源代码防泄漏方案分享
    源代码是软件开发的核心资产,一旦泄露,不仅会导致知识产权损失,还可能被竞争对手利用,给企业带来巨大的经济损失和法律风险。那么有没有针对源代码的防泄漏方案呢?接下来我为大家介绍2024最新的源代码防泄漏解决方案。1.访问控制:实施严格的访问控制策略,确保只有授权的开发者和......
  • 最新版康泰克完整版- Kontakt v7.10.5 for Win和Mac,支持m芯片和intel,有入库工具
    一。世界最受欢迎的采样器的新篇章    NativeInstrumentsKontakt是采样器领域的标准,您将获得高质量的滤波器,在这里您将找到经典的模拟电路和最现代的滤波器。每一个都可以根据您的口味进行定制,并且由于它,您可以获得前所未有的声音。这是一个解锁版本,这意味着您可以......