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

news/2024/11/15 18:51:08/文章来源:https://www.cnblogs.com/cola-tian/p/18306957

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

`const arr = [
{ name: "Jone", age: 18 },
{ name: "Tom", age: 15 },
{ name: "Liu", age: 48 }
];
const list = {}
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基本功还不扎实,需要加强练习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745145.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac ssh自动输入密码

1. 需要在Mac上安装expect,如果已经安装过可以省略这一步 Mac 上安装一般是使用homebrew安装,在终端上输入brew install expect可以安装,如果还未安装过homebrew的朋友参考https://www.cnblogs.com/orzs/p/18306760或自行百度。2. 编写脚本 第一个脚本autossh.exp#!/usr/bin…

windows动态磁盘扩容

1. 基本磁盘 基本磁盘的卷旁边没有未分配空间的话,是无法进行扩容的 2. 动态磁盘 动态磁盘旁边没未分配空间的话可以扩容,会在原本最后面一共卷后在追加一个卷空间(与被扩容卷同名)其他 动态磁盘与基本磁盘对比: 一块基本磁盘只能包含4个分区,它们是最多三个主分区和一个…

C#8 中有趣的的索引和范围特性

C#8 中有趣的的索引和范围特性var array = new int[]{3,4,6,4,52,63,5,545,4,345,5,52,6};Debug.Log(array[^5]);Debug.Log(array[5..8].Length);使用这些索引和范围特性可以让您更方便地访问和操作数组、列表或字符串中的元素。它们不仅可以提高代码的可读性,还可以减少一些常…

DC4靶机渗透测试报告

概述测试目的测试范围序号系统IP1本地192.168.152.1282靶机DC4192.168.152.134详细测试流程1、发现测试目标2、信息收集开放了22端口和80端口访问80端口,发现没什么可用的,就用BP暴力破解最后得到密码是happy登录3、漏洞利用登录以后可以看到有执行命令的单选框,这个时候我们…

DC5靶机渗透测试报告

概述测试目的测试范围序号系统IP1本机192.168.152.1282DC5靶机192.168.152.136详细测试流程1、发现测试目标2、信息收集3、漏洞利用访问80端口,这个页面我什么都没有发现,目录扫描好像也没什么用没办法,看一下大佬的WPVulnHub靶机 DC-5 打靶 渗透测试详细过程_dc-5主机渗透试…

连通性相关

连通性相关 强连通分量 强连通分量(SCC):极大的强连通子图。 Tarjan 算法 维护一个栈存储搜索到的还未确定强连通分量的点,定义:\(dfn_u\) :节点 \(u\) 被搜索的次序。 \(low_u\) :\(u\) 子树中能回溯到的最小的 \(dfn\) 。不难得到:一个点子树内的 \(dfn\) 大于该点的…

DC1主机渗透测试报告

概述测试目的通过模拟黑客的渗透测试,评估目标系统是否存在可以被攻击者真实利用的漏洞以及由此引起的风险大小,为制定相应的安全措施与解决方案提供实际的依据。分析客户WEB应用系统的安全现状,检测WEB应用系统的漏洞和安全问题,并验证其他已知的脆弱点。对系统的任何弱点…

ruoyi-flow 是一个轻量、灵活的工作流引擎, 真正的国产工作流引擎 (非BPM)。 其特点简洁轻量、独立组件、易扩展、易集成,且还拥有一个简洁美观的流程设计器。

ruoyi-flow 项目概述 项目介绍 ruoyi-flow 是一个轻量、灵活的工作流引擎, 真正的国产工作流引擎 (非BPM)。 其特点简洁轻量、独立组件、易扩展、易集成,且还拥有一个简洁美观的流程设计器。 项目背景 开源的流程引擎也好状态机引擎也好不可谓不多,他们的优点是功能很完备…

C#写个简单的windows服务+部署

部署: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 InstallUtil.exe C:\Users\Administrator\source\repos\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe 启动 停止 日志: 😘宝子:除非不再醒来,除非太阳不再升起,不然都请你好好生活,挣扎着…

laravel11:发生异常时返回json

一,未配置前laravel11直接render页面 如图:二,配置 1, bootstrap/app.php <?phpuse Illuminate\Http\Request; use Illuminate\Auth\AuthenticationException; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Foundation\Application; use I…

W外链创建小红书私信卡片教程

在当今的社交媒体时代,小红书以其独特的社区属性和用户粘性,成为了许多品牌和个人展示自己、推广产品的重要平台。而在小红书上,一张精美且富有吸引力的卡片往往能够迅速吸引用户的注意,提高点击率和转化率。本文将详细介绍如何使用W外链来创建小红书卡片,帮助你在小红书上…

kettle从入门到精通 第七十六课 ETL之kettle kettle连接hive教程

1、群里有小伙伴询问kettle连接hive的demo,今天抽点时间整理下。其实kettle连接hive和连接mysql数据库也是一样的。 1)kettle中的lib目录下放hive驱动jar,这里我使用的是kyuubi-hive-jdbc-shaded-1.9.0.jar。 2)设置hive连接参数。 3)通过表输入进行读取数据。 2、下载kyu…