
python
文章平均质量分 89
[虚幻私塾】
这个作者很懒,什么都没留下…
展开
-
手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)
今天和大家一起来看一下在LabVIEW中如何使用OpenCV DNN模块实现手写数字识别OpenCV中的DNN(Deep Neural Network module)模块是专门用来实现深度神经网络相关功能的模块。OpenCV自己并不能训练神经网络模型,但是它可以载入别的深度学习框架(例如TensorFlow、pytorch、Caffe等等)训练好的模型,然后使用该模型做inference(预测)。而且OpenCV在载入模型时会使用自己的DNN模块对模型重写,使得模型的运行效率更高。原创 2022-09-30 12:39:28 · 655 阅读 · 2 评论 -
Docker容器获取宿主机信息
实际项目当中,我获取了CPUID、系统序列号、系统UUID、系统型号、处理器厂家,之所有获取这么多信息标识机器,是考虑到有些信息在某些系统可能为空,而且CPUID也不唯一了,所以就多获取些。思路:在docker容器内安装ssh,sshpass服务,通过ssh连接到宿主机执行命令,获 取宿主机信息(必须知道宿主机Ip和密码)大体思路是docker 支持通过-e来传递参数到容器内部程序,就像安装docker-mysql那样密码可以通过参数传递一样。将宿主机的如下两个目录挂载到容器中。原创 2022-09-30 01:07:50 · 5520 阅读 · 0 评论 -
在图片不被裁剪时opencv绕图片中任意点旋转任意角度
绕图片中心旋转图片不裁剪。原创 2022-09-29 01:12:45 · 1079 阅读 · 0 评论 -
设计模式之策略模式
使用策略模式会让我们的代码更加的“干净”,但是如果实际的if判断中的逻辑很简单,我们仍然使用策略模式,就变成了为了使用设计模式而使用,这无疑加重系统的复杂程度。就像商城系统中,微信支付、支付宝支付、银联支付,业务逻辑没那么简单的,使用策略模式就是一个好的选择。整体来说策略模式在行为型模式中还属于一种比较简单的模式,无论是理解起来还是写起来都属极简单,难度堪比结构型设计模式中的单例模式。设计模式的学习要成体系,推荐你看我往期发布的设计模式文章。一、设计模式概述二、设计模式之工厂方法和抽象工厂。原创 2022-09-28 12:45:14 · 221 阅读 · 0 评论 -
面试突击87:说一下 Spring 事务传播机制?
Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY;不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED,其中 REQUIRED 是默认的事务传播级别。是非审之于己,毁誉听之于人,得失安之于数。公众号:Java面试真题解析。原创 2022-09-28 01:07:21 · 438 阅读 · 0 评论 -
Git 便捷操作
然而整体功能没完成是不能提交到主干的,而且也倾向于整体功能完成合并为一个提交。**背景:**有的时候从原仓库fork出了一个新仓库,这个新仓库做了自己的修改。可是原仓库也进行了更新,比如修复了bug,增加了新特性之类的。这样就把原仓库代码拉到本地了,而且 upstream 跟原仓库进行了绑定。当你的项目很大,而有多个特性需要开发时,为了避免频繁切换分支,可以使用。切换到fork仓库的分支,可以新建一个合并分支。**原理:**把原仓库的代码拉到本地,然后通过。最后,如果完成了,可以执行命令移除这个绑定。原创 2022-09-27 01:07:51 · 1089 阅读 · 0 评论 -
打印 Logger 日志时,需不需要再封装一下工具类?
现在打印日志一般都是使用 slf4j,因为使用日志门面,有助于打印方式统一,即使后面更换日志框架,也非常方便。这也是为什么在开发规范中建议大家手写判断,虽然日志框架中帮我们进行了判断,那只是避免了打印输出日志,实际上像组装日志,序列化实例对象等等还是会被执行的。说到这里相信小伙伴已经看出问题了,因为这样写的话,当我关闭日志打印时,只是关闭了磁盘输出,但是耗时逻辑依然会继续执行。本文的主要内容是讨论为什么要封装,有没有必要封装,以及怎样封装,如果小伙伴有更好的建议,可以提出,进行互相学习。原创 2022-09-26 12:37:48 · 223 阅读 · 0 评论 -
Elasticsearch from/size-浅分页查询-深分页 scroll-深分页search_after深度查询区别使用及应用场景
copy1.每个文档具有一个唯一值的字段应该用作排序规范的仲裁器。否则,具有相同排序值的文档的排序顺序将是未定义的。建议的方法是使用字段_id,它肯定包含每个文档的一个唯一值。2.为了找到每一页最后一条数据,每个文档必须有一个全局唯一值,官方推荐使用 _uid 作为全局唯一值,其实使用业务层的 id 也可以。{},"sort": [],"from": 0,}copy# 为了根据最后一条数据的唯一标识来查询1w后面的数据。原创 2022-09-26 01:10:23 · 1198 阅读 · 0 评论 -
非自交任意多边形与矩形框的交集面积计算方法
根据交集矩形的生成方法,各边线与凸多边形必然都有交点,如果交点为多边形顶点,则进一步判断顶点的2条边的邻接点是否在边线的同一侧,如果为同一侧,则该顶点算两个点。针对第一个凹点p(i),从p(i-2)开始反向扫描,检测向量p(i-1)p(i)与向量p(i)p(k)的叉乘,k=i-2,…p(i)为新的多边形P1,p(i)p©连线为切分线,p(i)、p©及余下的点组成剩余多边形P2。交集多边形为凸多边形,因此面积计算可使用三角形方法,以p0点为固定点,依次取p(i-1)和p(i),i=2,…原创 2022-09-25 12:42:20 · 759 阅读 · 0 评论 -
Django 使用VScode 创建工程
在新创建的虚拟环境中,没有Django 框架,需要 安装Django —> 创建Django 项目 —> 启动在激活虚拟环境的 VSCode 终端 (安装指定版本的 Django,不带版本号默认安装最新版本)。新建文件夹–>搭建虚拟环境,新建一个项目文件夹 mysite,在当前文件夹cmd输入指令 env (虚拟环境名称),创建虚拟环境。mysite(项目名),创建Django 项目,可以和虚拟环境放在同一目录,也可以放在虚拟环境的文件夹里。说明 pip 版本太低,直接按照提示的命令升级即可 (可省略)原创 2022-09-25 01:14:02 · 812 阅读 · 0 评论 -
深度剖析Istio共享代理新模式Ambient Mesh
原来在监听器根上还有一种设置过滤器匹配条件的方式,通过下面匹配到源地址为10.244.1.4,目的地址为10.96.179.71,目的端口为9080的流量,交由"spiffe://cluster.local/ns/default/sa/sleep_to_http_productpage.default.svc.cluster.local_outbound_internal"过滤器处理,服务网格的能力是通过 ztunnel 和 waypoint proxy 提供的,应用和网格组件的部署和升级不再相互依赖。原创 2022-09-24 12:43:39 · 269 阅读 · 0 评论 -
怎样编写正确、高效的 Dockerfile
多阶段构建指在Dockerfile中使用多个FROM语句,每个FROM指令都可以使用不同的基础镜像,并且是一个独立的子构建阶段。使用多阶段构建打包Java/GO应用具有构建安全、构建速度快、镜像文件体积小等优点。原创 2022-09-24 01:10:56 · 606 阅读 · 0 评论 -
我面试的人成了我的领导,我该不该离职?
但是,说实话,我还是咯噔一下,以自己的个性,我的年纪比新来的总监大2岁,如果有冲突,我可能无法接受一个年纪比我小的人对我指指点点。最后大家问题汇总差不多了,我看了其中一条很好奇,就对人事说,老板这里补充的内容不对,既要有管理能力,又要有技术攻关能力,这个人是JAVA背景,从技术栈来看应该不合适,因为我们用的是.NET技术栈。因为从概率的角度看,技术创业成功的大部分是技术背景的人,不管是雷军,张一鸣,王兴,李彦宏,刘强东,张朝阳,马化腾,华为就更不用说了,没有技术背景的是不能做高管的。原创 2022-09-23 12:42:17 · 284 阅读 · 0 评论 -
新渲染引擎、自定义设计和高质量用户体验的样例应用 Wonderous 现已开源
Flutter 的愿景是让你能够在空白画布上绘制出不受限制的精美应用。最近,通过与 gskinner 团队的通力合作,我们打造了一个全新的移动应用 Wonderous 来实现这个愿景。我们采用不同以往的设计系统,借助于 Flutter 为 Wonderous 创建出了极具表现力的界面,这个界面为移动设备量身定制并实现了设计者的创意愿景。该应用已为国内用户提供中文版,请访问。或者到 Wonderous 的。△ Wonderous 应用截图。原创 2022-09-23 01:08:00 · 153 阅读 · 0 评论 -
AQS:Java 中悲观锁的底层实现机制
AQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础。比如各种锁:ReentrantLock、ReadWriteLock、StampedLock各种线程同步工具类:CountDownLatch、CyclicBarrier、Semaphore线程池中的 WorkerLock 接口的实现基本都是通过聚合了一个 AQS 的子类来完成线程访问控制的。Doug Lea 曾经介绍过 AQS 的设计初衷。原创 2022-09-22 12:44:31 · 104 阅读 · 0 评论 -
【C++】GoogleTest入门指南
X_PREDn(fun,v1,v2…):拥有n个参数的函数fun会返回True例如有一个函数equal(a,b),那么就是ASSERT_PRED2(equal,a,b)与ASSERT_EQ、ASSERT_TRUE()这些断言的区别在于输出的错误信息不同,同时它的功能更加强大。原创 2022-09-22 01:07:14 · 875 阅读 · 0 评论 -
基于OpenHarmony的智能喝水提醒器
Neptune OpenHarmony物联网IOT模组Wi-Fi&蓝牙双模开发板、超声波模块、蜂鸣器模块、杜邦线若干。(3)将OpenHarmony源码包所在路径映射到linux下,路径替换成自己的!将水杯放到超声波传感器前,实现15分钟提示一次喝水。(4)进入到/home/Neptune。(7)将代码文件移动至如下位置。原创 2022-09-21 12:37:21 · 701 阅读 · 0 评论 -
.NET WebAPI 自定义 NullableConverter 解决可为空类型字段入参“”空字符触发转换异常问题
前端只要给 parentId 的赋值从 “” 调整为 null 之后我们的接口就可以正常运行了,但是有的时候前端的组件这里取值可能是和一些组件库绑定的,不太方便绑定默认值为 null,很多情况下组件库组件的默认值都是 “” 空字符串的形式,所以经过和前端同事多次沟通之后想着从后端彻底解决这个问题,经过研究之后编写了下面的 NullableConverter 转换器,只要在项目启动的时候注册到 AddJsonOptions 其中即可。我们这里将上级部门ID定义为可以为空的类型,因为有些部门不存在上级部门。原创 2022-09-21 01:13:16 · 742 阅读 · 0 评论 -
关于 Math.random()生成指定范围内的随机数的公式推导
但是,最后需要注意的是,我们通过random所求的公式,是一个(a,b)的浮点数,当我们转为int类型后,其取值范围是[a,b-1]。(例如(2,7)的取值范围,转为整数只能取2,3,4,5,6)在 java 中,用于生成随机数的 Math 方法 random()只能生成 0-1 之间的随机数,而对于生成指定区间,例如 a-b 之间的随机数,却只能用相关计算公式。b=0,1*b=b),这时,我们要求的范围已经求出了他的最大范围值,但是,最先范围由于乘法还是零,所以,我们在再给(0,b)的取值再。原创 2022-09-02 01:09:56 · 1877 阅读 · 0 评论 -
Linux的NIS配置
一般情况下我们一台Server对应为若干台Client服务,当我们有大量的服务器需要为大量Client服务的时候,一台Server可能从响应的服务质量可能就不是那么美好了的。当我们拥有多台Linux服务器时,账号管理就成为一个比较头大的问题了,比如在全部的服务器上新建、删除账户和修改密码,一台一台ssh登录去操作显然不是个好主意,账户同步是个大问题。既然NIS的初衷的共享用户的,在生成数据库之前,先要把新建用户删除用户之类的操作完成,再生成数据库。ypbind为Client使用的,可以选择性安装。...原创 2022-09-01 01:16:16 · 1191 阅读 · 0 评论 -
中台建设:中台有效落地的6脉神剑
无法落地的中台,是没有价值的自嗨。有效落地,持续的能在业务中落地和运营的中台,才是有价值的中台,才能成为数字化的核心底座。中台建设和落地,需要从共识开始,到中台团队自身做好准备和节奏的控制,再到利用机会,资源和保持开发等方法,来保障和加速。...原创 2022-08-31 12:41:55 · 330 阅读 · 0 评论 -
Apache DolphinScheduler 简单任务定义及复杂的跨节点传参
3、node2中重新设置参数麻烦,**需要在 shell 中重新定义变量(id2、label2),**同时需要在shell任务内使用拼接的方式赋值(如:echo ‘id’)}');4、原创 2022-08-31 01:14:53 · 586 阅读 · 0 评论 -
设计模式之命令模式
优点很明显,解耦了命令请求与实现,很容易的可以增加新命令,支持命令队列。但是,这样会不可避免的使具体命令类过多,增加了理解上的困难。设计模式学到这种程度,我们就会发现设计模式不是一种单一的技术,而是各种技术的综合体。我们在学习设计模式的时候一定不要仅局限于一种模式,而是站在一定的高度去整体衡量哪种设计模式才是最优的。有时候我们会发现,使用设计模式会让我们的代码变得更加的复杂,但以自己目前的开发经验又不能确定是否采用设计模式是一个好的选择。...原创 2022-08-30 12:44:50 · 160 阅读 · 0 评论 -
python数据精度问题
在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和十进制之间对应问题会导致数值的精度问题,比如无法用有限个二进制位完整地表示0.1,因为0.1转化为二进制之后位一个无限循环小数。需要将float转换为Decimal,该类可以通过接受字符串(务必是字符串)形式的浮点数实现相对精确的小数计算(减缓了精度误差,但没有消灭)需要将整数部分与小数部分单独做处理可以解决。归根结底是计算机存储浮点数的问题。...原创 2022-08-30 01:07:50 · 4640 阅读 · 0 评论 -
PerfView专题 (第十二篇):对 C# 下的 SDK 类库进行监控(大结局)
总的来说,在 .NET 调试领域,让 PerfView 适当的配合 WinDbg,真的可以如虎添翼。原创 2022-08-29 01:14:00 · 314 阅读 · 0 评论 -
深入理解“字符编码模型”
最近踩坑了后端的文档生成,本想写篇相关的实践总结,忽然感悟到电子文档的魅力,尤其以“字符编码模型”为最,特此进行研究并写下此文。不了解Unicode、UTF-8、UTF-16、GBK,搞不清楚码位、码元等概念,或者经常遇到乱码问题的小伙伴都可以在本文找到答案。抽象字符表定义了当前的字符编码所支持的所有抽象字符的集合。抽象字符是指人从视觉上认为不同而从含义逻辑上认为相同的一组实际字符的集合,可认为该集合中的字符表示的含义相同。一层含义是,一个汉字有楷、行、草、隶等多种形体,但都表示同一个汉字,如下图。...原创 2022-08-28 12:44:34 · 573 阅读 · 0 评论 -
彻底理解线程
启动新的进程必须分配独立的内存空间,建立数据表维护它的代码段、堆栈段和数据段,这是昂贵的多任务工作方式。线程之间使用相同的地址空间,切换线程的时间远远小于切换进程的时间。守护线程是一种JVM中特殊的线程,在后台完成一些系统性的服务,比如垃圾回收。线程优先级的范围是1~10,默认的优先级是5,10极最高。创建进程和进程下的线程,共享了内存空间,读写一样的文件。每一个进程中至少有一个线程,同一进程的所有线程共享该进程的所有资源。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程,提高了CPU利用率。...原创 2022-08-28 01:10:26 · 231 阅读 · 0 评论 -
React报错之Property ‘value‘ does not exist on type ‘HTMLElement‘
正文从这开始~当我们试图访问一个类型为的元素上的属性时,会产生"Property ‘value’ does not exist on type ‘HTMLElement’"错误。为了解决该错误,在访问属性之前,使用类型断言将元素类型断言为。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqD4BHIZ-1661534128424)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/75da2f875f0f4a5d96deea6原创 2022-08-27 01:16:31 · 2881 阅读 · 1 评论 -
初识设计模式 - 单例模式
一个类只允许创建一个对象(或实例),那么这个类就是一个单例类,这种设计模式称作单例设计模式(Singleton Design Pattern),简称单例模式。单例模式保证系统内存中只存在一个对象,非常节省系统资源,对于一些需要频繁销毁的对象,使用单例模式可以提高系统性能。将单例类的构造方法定义为私有方法,禁止外部直接调用构造方法来实例化单例类的对象;在类的内部创建并保存类的唯一实例,并设置成私有变量,禁止外部直接调用这个实例变量;创建一个公开的静态方法,对外暴露类的唯一实例。...原创 2022-08-26 12:47:36 · 186 阅读 · 0 评论 -
StarRocks 运维工具 StarGo
如果您在配置文件中设定的部署路径不存在,且您有创建该路径的权限,StarGo 将根据配置文件自动创建部署目录。您也可以通过以下命令,在各部署节点分别创建部署路径。通过 StarGo,您可以使用简单的命令行实现多集群的部署、查看、升级、启动与停止等操作。以下示例创建了中控机 sr-dev@r0 与部署机 starrocks@r1、starrocks@r2 以及 starrocks@r3 间的 SSH 互信。创建成功后,集群将会自动启动。根据以下 YAML 模板,创建部署 StarRocks 集群的拓扑文件。.原创 2022-08-26 01:07:55 · 1272 阅读 · 0 评论 -
HCNP Routing&Switching之MAC安全
如果交换机收到的目标mac帧,在对应mac地址表里没有,此时交换机就会把对应数据包进行泛洪,如果在某一个接口收到了对应包的回复,此时它就会把对应接口和对应接口回复的源mac记录到mac地址表中;提示:常见的就这三种表项,动态,静态和黑洞;提示:正常情况下,如果交换机没有收到帧,对应是mac地址表是空的才对,上面的mac地址是我们本地lo接口的mac,这是我们使用云桥接lo接口,默认lo接口会每隔一段时间发送一个ssdp包来发现局域网里的设备,所以我们在交换机上能够看到对应lo接口的mac地址;原创 2022-08-24 12:47:04 · 1074 阅读 · 0 评论 -
React报错之React hook ‘useState‘ cannot be called in a class component
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D3Y9dzKn-1661274578536)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2a01cb9ce10e40568a33eff7e56a4142~tplv-k3u1fbpfcp-watermark.image?导致这个错误的原因是,钩子只能在函数组件或自定义钩子中使用,而我们正试图在一个类中使用钩子。解决该错误的一种方法是,将类组件转换为函数组件。原创 2022-08-24 01:10:41 · 3925 阅读 · 0 评论 -
关于Copy On Write Array List,你会安全使用么
从 CopyOnWriteArrayList 的名字就能看出CopyOnWriteArrayList 是满足CopyOnWrite 的 ArrayList,所谓CopyOnWrite 也就是说:在计算机,如果你想要对一块内存进行修改时,我们不在原有内存块中进行写操作,而是将内存拷贝一份,在新的内存中进行写操作,写完之后呢,就将指向原来内存指针指向新的内存,原来的内存就可以被回收掉了。再谈读,迭代读的时候是读取快照数据,只要生成了迭代器,迭代内的快照内容将保证不会发生改变,所以不适合用于实时读场景。原创 2022-08-23 12:39:39 · 189 阅读 · 0 评论 -
记一次有意思的 SQL 实现 → 分组后取每组的第一条记录
1、大家写 SQL 的时候,一定要多结合执行计划来写神奇的 SQL 之 MySQL 执行计划 → EXPLAIN,让我们了解 SQL 的执行过程!2、 t_task_latest_exec_log 初始数据的导入其实比较简单, 如下所示View Code一定要去执行,你会发现大惊喜!3、多和同事沟通,多和需求方沟通多和同事沟通,集思广益,说不定就找到合适的解决方案了多和需求方沟通,多谈谈个人的见解,也许需求改动一丢丢,但我们实现却容易很多4、留疑1、分组后如何取前 N 条。原创 2022-08-22 12:42:17 · 1000 阅读 · 0 评论 -
论文解读(PairNorm)《PairNorm: Tackling Oversmoothing in GNNs》
为简化 Eq.8\text{Eq.8} 的计算,令每个 ˜xi\tilde{\mathbf{x}}_{i} 减去行均值 ˜xci=˜xi−1nn∑i˜xi\tilde{\mathbf{x}}_{i}^{c}=\tilde{\mathbf{x}}_{i}-\frac{1}{n} \sum\limits _{i}^{n} \tilde{\mathbf{x}}_{i},其中 ˜xci\tilde{\mathbf{x}}_{i}^{c} 表示中心表示。原创 2022-08-22 01:09:39 · 656 阅读 · 0 评论 -
删除链表结点类问题
给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针。要求:空间复杂度 O(1)O(1)O(1),时间复杂度 O(n)O(n)O(n)例如:给出的链表为1→1→2→3→3,返回1→2→3。跟上一题的区别就在于,上一题的所有元素都至少会保留一个,而本题中只要有重复,重复结点一个也不保留。本题跟上题不同,如果头结点重复了,那头结点就得删除,为了方便操作,添加一个虚拟头结点。此外,如果头结点可能被删除,那就要构造一个虚拟头结点,方便删除头结点。例如:1→2→3→3→4→4→5,返回1→2→5.原创 2022-08-21 12:46:13 · 724 阅读 · 0 评论 -
MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)
注:数据库写了id自增的话,在实体类设置主键生成策略是没用的,因为数据库设置了自增,数据库优先级高于代码。写数据库的时候id设置了主键自增的话,插入的时候不需要加入id,因为MP会自动添加并且自增的。为了区分mapper层和service层的方法,所以service层的插入方法取名为save。下图是wrapper的条件方法,就不一一介绍了,下面举了六个就基本例子。一般都是用service层的方法,因为比mapper层的全。有传入id的情况会优先更新,如果更新不了,则会插入新的数据。是一般的Wrapper,原创 2022-08-21 01:14:56 · 672 阅读 · 0 评论 -
Unity3D学习笔记12——渲染纹理
在文章《Unity3D学习笔记11——后处理》中论述了后处理是帧缓存(Framebuffer)技术实现之一;而另外一个帧缓存技术实现就是渲染纹理了。通常来说,我们渲染的场景会直接显示到屏幕的颜色缓冲区,但其实纹理和屏幕一样都是二维的,通过把场景渲染到纹理,可以实现很多特别的三维应用场景。三维渲染引擎中,通常给相机封装一个渲染目标(Render Target)的接口,如果不设置,就渲染到屏幕;如果将其设置成一个纹理对象,就渲染到纹理。原创 2022-08-20 12:43:36 · 1215 阅读 · 0 评论 -
现代企业架构框架-数据架构
在中心化的数据架构中,这项工作一般由专职的数据团队承担,人们认为这是理所当然的,因为只有他们才具备分析类场景的专业技能。这个看法其实不够全面,因为要完成这些工作,除了专业技能外, 还需要对业务场景的理解,随着业务场景不断增多, 专职的数据团队对于某个具体的业务场景的理解往往弱于负责支持该业务场景的应用开发团队。运行类场景的数据架构设计,目前的关注点在于分 布式架构下,如何建立企业级一致的数据标准体系、 数据所有权定义以及数据自描述能力,为企业级的 数据治理以及对于分析类场景的支持奠定基础。原创 2022-08-20 01:12:46 · 612 阅读 · 0 评论 -
ES6 Promise详解
本文主要是对Promise本身的用法做一个全面解析而非它的原理实现,如果你对Promise的用法还不是很熟悉或者想加深你对Promise的理解,我相信这篇文章一定会帮到你。首先让我们先了解一下JavaScript为什么会引入PromisePromise是现代异步编程的基础,在Promise返回给我们的时候操作其实还没有完成,但Promise对象可以让我们操作最终完成时对其进行处理,无论成功还是失败。原创 2022-08-19 12:41:25 · 649 阅读 · 0 评论