当前位置: 首页 > news >正文

JavaScript异步编程 Async/Await 使用详解:从原理到最佳实践

在这里插入图片描述

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用
✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
🌞《Spring Security》专栏中我们将逐步深入Spring Security的各个技术细节,带你从入门到精通,全面掌握这一安全技术
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

JavaScript异步编程 Async/Await 使用详解:从原理到最佳实践

  • 1.背景与概念
  • 2. 语法详解
    • 2.1 声明与返回值
    • 2.2 使用 await 暂停执行
    • 2.3 错误处理
    • 2.4 语法规则
  • 3. 并发与性能
    • 3.1 顺序等待 vs 并行等待
    • 3.2 并行执行优化
    • 3.2 限制并发数量
  • 4. 异步迭代
  • 5 常见问题解决方案
    • 5.1 请求重试机制
    • 5.2 竞态条件处理
    • 5.3 异步生成器
    • 5.4 处理非 Promise 值
    • 5.5 常见陷阱
  • 6. 性能优化实践
    • 6.1 内存管理
    • 6.2 优先加载优化
  • 7. 结语

1.背景与概念

在传统 JavaScript 开发中,开发者长期面临回调地狱的困扰。随着 ES6 Promise 的出现,异步代码的可读性得到改善,但链式调用依然存在嵌套问题。2017 年 ES8 正式引入的 Async/Await 语法,让异步代码第一次拥有了同步代码般的可读性。

在这里插入图片描述

async 函数是基于 Promise 的语法糖,用于简化异步操作的书写方式。使用 async 声明的函数会隐式返回一个 Promise,函数体内部可以通过 await 暂停执行,直到对应的 Promise 完成或抛出错误后再继续执行。
await 操作符只能在 async 函数或模块顶层中使用,用于等待一个 Promise 解决,并将其结果作为表达式的值返回;如果 Promise 被拒绝,则会在该位置抛出异常,可配合常规的 try...catch 进行捕获处理。

这种写法极大地提升了异步代码的可读性,使得我们可以像编写同步代码一样直观地处理异步逻辑,同时保留了后台并发执行的优势。


2. 语法详解

2.1 声明与返回值

async function foo() {return 42;
}

上例中, foo() 会返回一个已解决(fulfilled)的 Promise,其值为 42;等价于:

function foo() {return Promise.resolve(42);
}

这是因为任何 async 函数内的返回值都会被自动封装为 Promise

2.2 使用 await 暂停执行

async function fetchData() {let response = await fetch('/api/data');let data = await response.json();return data;
}

代码解释:

  • 第一行的 await fetch(...) 会暂停 fetchData 的执行,直到 fetch 返回的 Promise 完成,并将其结果赋值给 response
  • 第二行的 await response.json() 同理,等待解析 JSON 后再继续执行
  • 如果任一 Promise 拒绝,则会在该 await 位置抛出异常,可在外层使用 try...catch 捕捉。

2.3 错误处理

async function safeFetch() {try {let res = await fetch('/bad/url');let json = await res.json();return json;} catch (err) {console.error('请求失败:', err);throw err; // 可再次抛出或返回默认值}
}

上述模式与同步代码中使用 try…catch 完全一致,大大简化了基于 Promise 链式 .catch() 的写法

2.4 语法规则

下面我们看看我们常用的一些使用语法

// 声明异步函数
async function fetchUser() {return { name: 'Alice', age: 28 }; // 自动包装为Promise
}// 使用箭头函数
const fetchData = async () => {const res = await fetch('/api/data');return res.json();
};// 立即调用模式
(async () => {const data = await fetchData();console.log(data);
})();

3. 并发与性能

3.1 顺序等待 vs 并行等待

默认情况下,连续的 await 会串行执行:

let a = await task1();
let b = await task2();

若两者互不依赖,可改为并行:

let [a, b] = await Promise.all([task1(), task2()]);

3.2 并行执行优化

通过上面 顺序等待 vs 并行等待 的介绍,通常我们可以按照以下形式来进行优化(模拟请求)

// 顺序执行(总耗时 = 各请求耗时之和)
async function serialRequests() {const res1 = await fetch('/api/1');const res2 = await fetch('/api/2');return [await res1.json(), await res2.json()];
}// 并行执行(总耗时 ≈ 最慢请求耗时)
async function parallelRequests() {const [res1, res2] = await Promise.all([fetch('/api/1'),fetch('/api/2')]);return await Promise.all([res1.json(), res2.json()]);
}

3.2 限制并发数量

在需要对大量异步任务进行限流时,可使用第三方库(如 p-limit)或自己实现简单队列,避免一次性发起过多请求导致资源竞争或网络拥堵


4. 异步迭代

ES2018 引入了 for await...of,用于遍历异步可迭代对象(如异步生成器):

async function* gen() {yield await fetchChunk(1);yield await fetchChunk(2);
}(async () => {for await (let chunk of gen()) {console.log(chunk);}
})();

该语法在处理流式数据(例如文件分块下载)时非常有用


5 常见问题解决方案

5.1 请求重试机制

在外面日常开发中,会遇到请求失败需要重试的需求,来看看以下模拟代码

async function fetchWithRetry(url, retries = 3) {for (let i = 0; i < retries; i++) {try {const res = await fetch(url);return await res.json();} catch (err) {if (i === retries - 1) throw err;await new Promise(r => setTimeout(r, 1000 * (i + 1)));}}
}

5.2 竞态条件处理

当多个请求并发执行时,可能因网络延迟、服务器响应速度差异等问题导致响应顺序与发送顺序不一致问题。
更详细讲解可以查阅博主写过一篇【 前端请求乱序问题分析与AbortController、async/await、Promise.all等解决方案】

以下仅展现实现代码:

let lastController = null;async function search(query) {// 取消前一个未完成的请求if (lastController) lastController.abort();const controller = new AbortController();lastController = controller;try {const res = await fetch(`/api/search?q=${query}`, {signal: controller.signal});return await res.json();} catch (err) {if (err.name !== 'AbortError') throw err;}
}

5.3 异步生成器

在 ·async function*· 中,你既可以使用 ·await·,也可以使用 ·yield·,将异步任务与懒加载结合

async function* asyncGenerator() {for (let i = 0; i < 3; i++) {await delay(1000);yield i;}
}

这种方式适合按需获取异步数据,提高资源利用率

5.4 处理非 Promise 值

await 后可以跟任意表达式,如果其值不是 Promise,则会被包装为立即解决的 Promise。例如:

let x = await 123; // 相当于 await Promise.resolve(123)

但建议对非异步操作避免使用 await,以免误导

5.5 常见陷阱

  1. 遗忘 await:调用 async 函数但未加 await,会得到未决(pending)的 Promise 而非预期结果
  2. 在非 async 环境使用 await:仅在模块顶层或 async 函数内部可用,否则会抛语法错误
  3. Promise.all 中单个失败导致整体失败:若需要容忍部分失败,可对内部 Promise 使用 .catch() 处理,避免整体拒绝
  4. 滥用并发:同时发起过多网络请求可能触发限流或阻塞,建议根据场景调整并发策略

6. 性能优化实践

博主这里例举两个优化的案例:内存管理以及优先加载优化

6.1 内存管理

常见一些大量数据的获取下载

async function processLargeData() {const data = await getHugeData(); // 大数据量// 分块处理for (let i = 0; i < data.length; i += 1000) {const chunk = data.slice(i, i + 1000);await processChunk(chunk);data[i] = null; // 及时释放内存}
}

6.2 优先加载优化

async function loadCriticalResources() {// 预加载非关键资源const nonCritical = fetch('/non-critical').then(r => r.json());// 优先处理关键资源const user = await fetchUser();const config = await fetchConfig();// 等待非关键资源const data = await nonCritical;return { user, config, data };
}

7. 结语

Async/Await 的引入彻底改变了 JavaScript 异步编程的面貌。通过本文的讲解,相信小伙伴们可以掌握 Async/Await 的使用精髓,将使您的 JavaScript 代码在保持高性能的同时,获得质的可读性和可维护性提升。

如果你在实践过程中有任何疑问或更好的扩展思路,欢迎在评论区留言,最后希望大家 一键三连 给博主一点点鼓励!


前端技术专栏回顾:

01【前端技术】 ES6 介绍及常用语法说明
02【前端技术】标签页通讯localStorage、BroadcastChannel、SharedWorker的技术详解
03 前端请求乱序问题分析与AbortController、async/await、Promise.all等解决方案
04 前端开发中深拷贝的循环引用问题:从问题复现到完美解决
05 前端AJAX请求上传下载进度监控指南详解与完整代码示例
06 TypeScript 进阶指南 - 使用泛型与keyof约束参数
07 前端实现视频文件动画帧图片提取全攻略 - 附完整代码样例
08 前端函数防抖(Debounce)完整讲解 - 从原理、应用到完整实现
在这里插入图片描述

相关文章:

JavaScript异步编程 Async/Await 使用详解:从原理到最佳实践

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…...

Babylon.js学习之路《四、Babylon.js 中的相机(Camera)与视角控制》

文章目录 1. 引言&#xff1a;为什么相机是 3D 场景的“眼睛”&#xff1f;1.1 相机的核心作用1.2 常见相机类型概览 2. 相机基础参数解析2.1 通用属性2.2 相机坐标系 3. 详解常用相机类型3.1 自由相机&#xff08;FreeCamera&#xff09;3.2 弧形旋转相机&#xff08;ArcRotat…...

MCP Server多节点滚动升级一致性治理

飞书云文档原链接地址&#xff1a;https://ik3te1knhq.feishu.cn/wiki/W8ctwG2sAiPkrXkpl7ocP0g0njf [!TIP] MCP Server 多节点部署时&#xff0c;滚动发布&#xff0c;MCP Client 侧使用的 Client 连接保证使用的是最新的工具配置信息 后续推进&#xff1a;按比例使用旧、新实…...

多线程(二)

今天先来了解一个上一期的遗留概念 —— 前台线程与后台线程 一 . 前台线程与后台线程 大家应该多多少少都听过酒桌文化&#xff0c;咱们平常吃饭&#xff0c;座位次序是没有那么多讲究的&#xff0c;但是在跟领导吃饭&#xff0c;或者出席宴会和一些重要场所的饭局时&#…...

2025年,大模型LLM还有哪些可研究的方向?

近两年LLM在学术界与工业界的发展大家都有目共睹。到了今年&#xff0c;以预训练LLM为代表的大模型PK上半场已然结束&#xff0c;接下来就要进入下半场大模型2.0时代了。 那么在这新赛道&#xff0c;关于大模型我们还有什么可做的创新&#xff1f;要知道&#xff0c;如今的大模…...

VS打断点调试,无法命中断点或断点失效,解决方法

1.打开需要打断点的模块&#xff0c;点击属性&#xff0c;将C/C常规的调试信息格式改为程序数据库&#xff08;/Zi&#xff09; 2.将C/C的优化禁用&#xff08;/Od&#xff09; 3.将链接器中的生成调试信息改为生成调试信息&#xff08;/DEBUG&#xff09; 注&#xff1a;如果需…...

ELF文件详解

ELF 文件不仅仅是一个格式&#xff0c;它是 Linux 世界中程序的"灵魂容器"&#xff0c;承载着程序从编译到执行的整个生命周期。 今天咱们来聊一个看起来高深&#xff0c;实际上理解起来其实挺简单的话题—— ELF 文件。 不知道你有没有想过&#xff1a;我们敲下./…...

【学习笔记】Shell编程---流程控制语句

最近学了好多个流程控制语句&#xff0c;都有点混乱了&#xff0c;赶紧先把各种用法记录下来&#xff01; if 语句 语法格式&#xff1a; if 条件测试命令串 then 条件为真时执行的命令 else 条件为假时执行的命令 fi 以关键字if开头&#xff0c;后跟条件测试表达式&…...

TensorFlow 常见使用场景及开源项目实例

TensorFlow 常见使用场景及开源项目实例 摘要 本文详细介绍了 TensorFlow 在多个领域的典型应用及其对应的开源项目案例。涵盖了图像处理、自然语言处理、语音音频处理、推荐系统与时间序列预测、移动端与边缘计算以及生成式模型与创意应用等多方面内容&#xff0c;列举了大量…...

王炸组合!STL-VMD二次分解 + Informer-LSTM 并行预测模型

往期精彩内容&#xff1a; 单步预测-风速预测模型代码全家桶-CSDN博客 半天入门&#xff01;锂电池剩余寿命预测&#xff08;Python&#xff09;-CSDN博客 超强预测模型&#xff1a;二次分解-组合预测-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;BiLSTM-Attention预测模型…...

OpenCV进阶操作:风格迁移以及DNN模块解析

文章目录 前言一、风格迁移1、风格迁移是什么&#xff1f;2、步骤1&#xff09;训练2&#xff09;迁移 二、DNN模块1、什么是DNN模块2、DNN模块特点3、流程图4、图像预处理功能 三、案例实现1、数据预处理2、加载模型 总结 前言 风格迁移&#xff08;Style Transfer&#xff0…...

使用bitNet架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、配置二、报错总结 前言 大型语言模型&#xff08;LLM&#xff09;面临的挑战&#xff1a;高能耗、高内存需求、部署门槛高。 微软提出 BitNet 架构&#x…...

OpenCV中的光流估计方法详解

文章目录 一、引言二、核心算法原理1. 光流法基本概念2. 算法实现步骤 三、代码实现详解1. 初始化设置2. 特征点检测3. 光流计算与轨迹绘制 四、实际应用效果五、优化方向六、结语 一、引言 在计算机视觉领域&#xff0c;运动目标跟踪是一个重要的研究方向&#xff0c;广泛应用…...

Java集合框架详解与使用场景示例

Java集合框架是Java标准库中一组用于存储和操作数据的接口和类。它提供了多种数据结构&#xff0c;每种数据结构都有其特定的用途和性能特点。在本文中&#xff0c;我们将详细介绍Java集合框架的主要组成部分&#xff1a;List、Set和Queue&#xff0c;并通过代码示例展示它们的…...

多模态融合【十九】——MRFS: Mutually Reinforcing Image Fusion and Segmentation

目录 一.摘要 二.Introduction 三. 背景与动机 四.方法 4.1. 概述 4.2. IGM-Att模块 4.3. PC-Att模块 4.4. 任务头 五.实验 5.1. 数据集与实现细节 5.2. 语义分割 5.3. 图像融合 5.4. 消融研究 5.5. IGM-Att和PC-Att的应用增益 5.6. 复杂度讨论 5.7. 目标检测的…...

音频转文字-在线工具包及使用记录

资料来源&#xff1a;https://zhuanlan.zhihu.com/p/269603431&#xff08;多种方案&#xff09; 视频教程&#xff1a;https://www.youtube.com/watch?vL1H5ov4WTBg https://github.com/openai/whisper // 创建虚拟环境 python -m venv myvnev// 激活虚拟环境 source myvne…...

集合-进阶

Collection collection的遍历方式 迭代器遍历 不依赖索引 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class mycollection {public static void main(String[] args) {//1.创建集合并添加元素Collection<String> co…...

【阿里云】阿里云 Ubuntu 服务器无法更新 systemd(Operation not permitted)的解决方法

零、前言 目前正在使用的Ubuntu服务器中&#xff0c;仅阿里云&#xff08;不止一台&#xff09;出现了这个问题&#xff0c;因此我判定是阿里云服务器独有的问题。如果你的服务器提供商不是阿里云&#xff0c;那么这篇文章可能对你没有帮助。 如果已经因为升级错误导致依赖冲突…...

wpf DataGrid 行选择 命令绑定

在WPF中实现DataGrid行选择与命令绑定的MVVM模式,可通过以下方式结合代码示例实现: 1. ‌基础绑定与命令触发(SelectionChanged事件绑定)‌ 通过Interaction.Triggers捕获SelectionChanged事件,并绑定到ViewModel中的命令: <DataGrid ItemsSource="{Binding I…...

【认知思维】验证性偏差:认知陷阱的识别与克服

什么是验证性偏差 验证性偏差&#xff08;Confirmation Bias&#xff09;是人类认知中最普遍、最根深蒂固的心理现象之一&#xff0c;指的是人们倾向于寻找、解释、偏爱和回忆那些能够确认自己已有信念或假设的信息&#xff0c;同时忽视或贬低与之相矛盾的证据。这种认知偏差影…...

大容量存储的高性能 T-BOX 方案对智能网联汽车的支撑

在智能网联汽车快速发展的当下&#xff0c;车载 T-BOX&#xff08;Telematics Box&#xff09;作为车辆与云端互联的核心枢纽&#xff0c;其性能和可靠性直接决定了用户体验的上限。米客方德&#xff08;MK&#xff09;推出的基于 STM32H7RX 主控芯片与 MKDV4GIL-AST&#xff0…...

Linux 内核网络协议栈:从 Socket 类型到协议注册的深度解析

Linux 内核的网络协议栈是一个复杂而高效的体系,涉及多层次的协议处理与数据流转。本文通过分析核心数据结构(如 inetsw 数组、sock_type 枚举)和关键函数(如 inet_add_protocol),深入探讨其工作原理与设计哲学。 一、Socket 类型与 sock_type 枚举 1.1 Socket 类型的定…...

vim,gcc/g++,makefile,cmake

一、vim&#xff1a;你的小帮手——文本编辑器 它是干嘛的&#xff1f; 想象你的代码就像是写在一本“程序的笔记本”里&#xff0c;vim就是一个超级厉害的“数字笔记本”或“文字编辑器”。 它有什么用&#xff1f; 编写代码&#xff1a;编辑、修改你的源代码代码高亮&…...

解决 CentOS 7 镜像源无法访问的问题

在国内使用 CentOS 系统时&#xff0c;经常会遇到镜像源无法访问或者下载速度慢的问题。尤其是默认的 CentOS 镜像源通常是国外的&#xff0c;如果你的网络环境无法直接访问国外服务器&#xff0c;就会出现无法下载包的情况。本文将介绍如何修改 CentOS 7 的镜像源为国内镜像源…...

“傅里叶变换算法”来检测货物外形损坏

“傅里叶变换算法”来检测货物外形损坏 要使用傅里叶变换算法来检测货物外形损坏&#xff0c;首先需要理解基本概念。傅里叶变换是一种数学变换&#xff0c;用于将信号从时域&#xff08;或空间域&#xff09;转换到频域。在图像处理中&#xff0c;二维傅里叶变换可以用来分析…...

python打卡day24

可迭代对象、OS模块 知识点回顾&#xff1a; 元组可迭代对象os模块 作业&#xff1a;对自己电脑的不同文件夹利用今天学到的知识操作下&#xff0c;理解下os路径 1.元组 在day3的打卡内容中就介绍了元组&#xff0c;跟列表比起来就是用了圆括号&#xff0c;有序可以重复&#x…...

MapReduce 入门实战:WordCount 程序

一、引言 在大数据处理领域&#xff0c;MapReduce 是一种开创性的编程模型和处理框架&#xff0c;它使得我们能够高效地在大规模分布式系统上处理海量数据。而 WordCount 程序作为 MapReduce 的经典入门案例&#xff0c;堪称大数据领域的 “Hello World”&#xff0c;帮助无数…...

深度剖析:Vue2 项目兼容第三方库模块格式的终极解决方案

当我们为 Vue2 项目引入某些现代 JavaScript 库时&#xff0c;常常会遇到这样的报错&#xff1a; error in ./node_modules/some-lib/lib/index.mjs Cant import the named export xxx from non EcmaScript module这类问题的本质是模块格式的世纪之争 —— ES Module&#xff…...

5.11作业

拓扑图&#xff1a; 需求分析&#xff1a; 要求五台路由器的环回地址均可以相互访问 配置&#xff1a; r1 int g 0/0/0 i…...

MyBatis 批量新增与删除功能完整教程

一、功能概述 通过 MyBatis 动态 SQL 实现以下功能: 批量新增:一次性插入多条员工记录,支持自增主键回填。批量删除:根据 ID 数组一次性删除多条记录。二、代码逐行解析 1. Mapper 接口定义 // 批量新增:传入员工对象集合 void insertAll(List<Emp> empList);// …...

Spark,RDD中的行动算子

RDD中的行动算子 collect算子 格式&#xff1a;def collect(): Array[T] 参数说明&#xff1a;该算子没有参数。 并以数组的形式返回 统计个数 reduce算子 格式&#xff1a;def reduce(func: (T, T) > T): T 返回值&#xff1a;返回一个单一的值&#xff0c;其类型与…...

Linux:进程控制2

一&#xff1a;进程程序替换 1. 一旦程序替换成功&#xff0c;就去执行新代码了&#xff0c;原始代码的后半部分已经不存在了 2. exec*系列的函数&#xff0c;没有成功返回值&#xff0c;只有失败返回值-1 在程序替换的过程中&#xff0c;并没有创建新的进程&#xff0c;只是…...

Java jar包程序 启动停止脚本 shell bash

启动 启动时 可指定前缀&#xff08;名称&#xff09; start.sh #!/bin/bash # 使用时直接运行# 寻找当前目录下后缀为 .jar 的文件 #options($(find . -maxdepth 1 -type f -name "*.jar")) # 寻找当前目录下后缀为 .jar 的文件&#xff0c;并按时间倒序排序 opt…...

【Linux】进程通信 管道

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、&#x1f451;进程间通信分类 二、&#x1f451;管道 &#x1f31f;什么是管道&#xff1f; &#x1f31f;匿名管道 &#x1f389;原理&#xff1a; &#x1f525;站在文件描述…...

基于智能家居项目 解析DHT11温湿度传感器

一、模块简介 DHT11 是一款数字式温湿度传感器&#xff0c;内部集成了温度传感元件、湿度传感元件以及一个 8 位单片机芯片&#xff0c;用于采集数据和通信。。 测量范围&#xff1a;湿度 20%&#xff5e;90% RH&#xff0c;温度 0&#xff5e;50℃ 精度&#xff1a;湿度 5% …...

3.1 泰勒公式出发点

第一步&#xff1a;引入背景与动机 首先&#xff0c;泰勒公式&#xff08;Taylor Series&#xff09;是数学分析中的一个重要工具&#xff0c;它允许我们将复杂的函数近似为多项式形式。这不仅简化了计算&#xff0c;还帮助我们更好地理解函数的行为。那么为什么我们需要这样一…...

裸机开发的核心技术:轮询、中断与DMA

一、裸机开发的核心技术&#xff1a;轮询、中断与DMA 1. 轮询&#xff08;Polling&#xff09; 定义&#xff1a;程序主动、周期性地检查硬件状态或数据。应用场景&#xff1a;适用于简单、实时性要求不高的任务。示例&#xff1a; C while (1) { if (GPIO_ReadPin(SENSOR_P…...

从零开始:使用 Vue-ECharts 实现数据可视化图表功能

目录 前言为什么选择 Vue-ECharts案例&#xff1a;Vue-Echart开发一个分组柱状图 安装依赖 引入 全局引入 按需引入编写组件总结 前言 你好&#xff0c;小二&#xff01;很高兴你愿意分享关于 Vue-ECharts 的使用经验。 &#x1f4ca; Vue-ECharts&#xff1a;让你在 Vue 项…...

Antd中Form详解:

1.获取Form表单值的方式: ① 使用Form.useForm()钩子&#xff08;推荐方式&#xff09; const [form] Form.useForm();const getFormValues () > {const values form.getFieldsValue();};<Form form{form}>...<Form.Item label{null}><Button onClick{ge…...

(2)python开发经验

文章目录 1 pyside6加载ui文件2 使用pyinstaller打包 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 pyside6加载ui文件 方法1&#xff1a; 直接加载ui文件 from PySide6.QtWidgets import QAp…...

Landsat 5介绍

USGS Landsat 5 Level 2, Collection 2, Tier 1 数据集可用性&#xff1a;1984-03-16T16:18:01Z–2012-05-05T17:54:06Z 数据集提供程序 USGS Earth Engine 代码段 ee.ImageCollection("LANDSAT/LT05/C02/T1_L2") open_in_new 重新访问间隔&#xff1a;16 天 说…...

PowerShell 实现 conda 懒加载

问题 执行命令conda init powershell会在 profile.ps1中添加conda初始化的命令。 即使用户不需要用到conda&#xff0c;也会初始化conda环境&#xff0c;拖慢PowerShell的启动速度。 解决方案 本文展示了如何实现conda的懒加载&#xff0c;默认不加载conda环境&#xff0c;只…...

解锁ozon运营新路径:自养号测评技术如何实现降本增效

OZON测评自养号技术在跨境电商运营中具有显著的技术优势&#xff0c;主要体现在环境安全、账号控制、成本效率及风险规避等方面。以下是具体分析&#xff1a; 一&#xff1a;安全可控的测评环境搭建通过模拟俄罗斯本地物理环境和家庭住宅IP&#xff0c;自养号测评可规避平台风…...

算法第十七天|654. 最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

654. 最大二叉树 题目 思路与解法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def constructMaximumB…...

Spring Boot 的自动配置为 Spring MVC 做了哪些事情?

Spring Boot 的自动配置为 Spring MVC 做了大量的工作&#xff0c;极大的简化了我们开发时的配置负担&#xff0c;我们可以快速启动并运行一个基于 Spring MVC 的 Web 应用。以下是 Spring Boot 自动配置为 Spring MVC 所做的主要事情&#xff1a; DispatcherServlet 的自动注册…...

【python】—conda新建python3.11的环境报错

1.报错 conda create -n py3.11 python3.11 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ Collecting package metadata: done Solving environment: failed PackagesNotFoundError: The following packages are not available from current channel…...

桑德拉精神与开源链动2+1模式AI智能名片S2B2C商城小程序的协同价值研究

摘要&#xff1a;本文深入剖析桑德拉无私奉献精神在商业领域的映射价值&#xff0c;结合开源链动21模式、AI智能名片及S2B2C商城小程序的技术特性&#xff0c;系统探讨其在用户赋能、资源协同与价值共创中的协同效应。研究表明&#xff0c;该技术组合通过去中心化激励、智能需求…...

JavaEE--初识网络

目录 一、IP地址 二、端口号 三、认识协议 四、五元组 五、协议分层 1. OSI七层模型 2. TCP/IP五层&#xff08;或四层&#xff09;模型 3. 网络设备所在分层 4. 封装和分用 一、IP地址 IP地址&#xff08;Internet Protocol Address&#xff09;是用于标识设备在网络…...

2.7/Q2,Charls最新文章解读

文章题目&#xff1a;Climate risks, multi-tier medical insurance systems, and health inequality: evidence from Chinas middle-aged and elderly populations DOI&#xff1a;10.1186/s12913-025-12648-2 中文标题&#xff1a;气候风险、多层次医疗保险制度和健康不平等—…...

Mac显卡的工作原理及特殊之处

目录 &#x1f9e0; 一、显卡的基本工作原理&#xff08;适用于所有平台&#xff09; &#x1f34f; 二、Mac 显卡的工作机制 1. Mac 使用的显卡类型 Intel 架构时代&#xff08;Intel CPU Intel/AMD 显卡&#xff09; Apple Silicon 时代&#xff08;M1/M2/M3 芯片&…...