JavaScript 异步编程:Promise 与 await 的关联与使用
在 JavaScript 中,异步编程是处理耗时操作(如网络请求、文件读写等)的核心机制。Promise
和 await
是两种常用的异步编程工具,它们密切相关,但又有各自的特点和适用场景。本文将深入探讨它们的关联、区别以及如何在实际开发中灵活运用。
1. 异步编程的基础:Promise
Promise
是 JavaScript 中处理异步操作的核心对象。它代表一个异步操作的最终完成(或失败)及其结果值。Promise
有三种状态:
- Pending(待定):初始状态,表示操作尚未完成。
- Fulfilled(已实现):表示操作成功完成。
- Rejected(已拒绝):表示操作失败。
1.1 创建和使用 Promise
const myPromise = new Promise((resolve, reject) => {setTimeout(() => resolve("操作成功"), 1000);
});myPromise.then(result => console.log(result)) // 输出:操作成功.catch(error => console.error(error));
通过 .then()
和 .catch()
,可以分别处理 Promise
的成功和失败结果。
2. 异步编程的简化:await
await
是 ES2017(ES8)引入的关键字,用于简化 Promise
的使用。它只能在 async
函数中使用,其作用是暂停 async
函数的执行,直到 Promise
完成。
2.1 使用 await
async function myAsyncFunction() {try {const result = await myPromise; // 等待 Promise 完成console.log(result); // 输出:操作成功} catch (error) {console.error(error);}
}myAsyncFunction();
await
让异步代码看起来像同步代码,提高了代码的可读性和可维护性。
3. Promise 与 await 的关联
3.1 关联
await
依赖Promise
:await
只能用于等待Promise
对象。如果await
后面不是一个Promise
,JavaScript 会自动将其转换为一个Promise
。
async
函数返回 Promise
:任何 async
函数都会隐式返回一个 Promise
,其状态由函数内部的 await
和返回值决定。
async function example() {return "Hello";
}example().then(result => console.log(result)); // 输出:Hello
3.2 区别
特性 | Promise | await |
---|---|---|
代码风格 | 使用 .then() 和 .catch() 链式调用 | 使用同步写法,代码更简洁易读 |
错误处理 | 通过 .catch() 处理错误 | 通过 try...catch 处理错误 |
执行顺序 | 需要显式编写 .then() 和 .catch() | 隐式暂停函数执行,直到 Promise 完成 |
4. 使用场景
4.1 使用 Promise 的场景
需要手动控制多个异步操作的顺序或并行执行。
需要直接操作 Promise
的状态(如 Promise.all
或 Promise.race
)。
Promise.all([promise1, promise2]).then(results => console.log(results)).catch(error => console.error(error));
4.2 使用 await 的场景
需要以同步的方式编写异步代码,提高可读性。
需要简化错误处理逻辑。
async function fetchData() {try {const data1 = await fetch(url1);const data2 = await fetch(url2);console.log(data1, data2);} catch (error) {console.error(error);}
}
5. 总结
和 Promise
await
是 JavaScript 异步编程的两大核心工具:
-
Promise
是异步编程的基础,提供了对异步操作的直接控制。 -
await
是基于Promise
的语法糖,用于简化异步代码的编写。 -
对于复杂的异步控制(如并行执行多个异步操作),使用
Promise
。 -
对于需要简化代码和提高可读性的场景,使用
await
。
相关文章:
JavaScript 异步编程:Promise 与 await 的关联与使用
在 JavaScript 中,异步编程是处理耗时操作(如网络请求、文件读写等)的核心机制。Promise 和 await 是两种常用的异步编程工具,它们密切相关,但又有各自的特点和适用场景。本文将深入探讨它们的关联、区别以及如何在实际…...
体验用ai做了个python小游戏
体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见,欢迎页面和结束页面背景是视频,游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…...
golang常用库之-swaggo/swag根据注释生成接口文档
文章目录 golang常用库之-swaggo/swag库根据注释生成接口文档什么是swaggo/swag golang常用库之-swaggo/swag库根据注释生成接口文档 什么是swaggo/swag github:https://github.com/swaggo/swag 参考文档:https://golang.halfiisland.com/community/pk…...
【可实战】Linux 常用统计命令:排序sort、去重uniq、统计wc
在 Linux 系统中,有一些常用的命令可以用来收集和统计数据。 一、常用统计命令的使用场景 日志分析和监控:通过使用 Linux 统计命令,可以实时监控和分析系统日志文件,了解系统的运行状况和性能指标。例如,使用 tail 命…...
【设计模式】【创建型模式】建造者模式(Builder)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
UE5.3 C++ 通过Spline样条实现三维连线,自己UV贴图。
一.制作了基于USplineComponent的画线插件,就是我们常说的样条线。 直接看怎么用,关于插件实现细节,后续会更新,看思路就行。通过ID,管理每一条线。移除删掉上一帧的线条Mesh。第一个点,是本身直接放过去。第二个点是…...
每日学习Java之一万个为什么
9.Class <?> class1 Myclass.class 为什么要有通配符?传给谁用的? 首先,这里的class特指某个对象在JVM中的元数据集合。 有普通、接口、数组、基本类型、 void 类型、局部类、匿名类、枚举、注解 1.类型安全:通配符允许…...
4、IP查找工具-Angry IP Scanner
在前序文章中,提到了多种IP查找方法,可能回存在不同场景需要使用不同的查找命令,有些不容易记忆,本文将介绍一个比较优秀的IP查找工具,可以应用在连接树莓派或查找IP的其他场景中。供大家参考。 Angry IP Scanner下载…...
华为昇腾920b服务器部署DeepSeek翻车现场
最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…...
一周学会Flask3 Python Web开发-http响应状态码
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在Flask程序中,客户端发出的请求触发相应的视图函数,获取返回值会作为响应的主体,最后生成…...
Javascript网页设计实例:通过JS实现上传Markdown转化为脑图并下载脑图
功能预览 深度与密度测试 对于测试部分,分别对深度和密度进行了测试: 注意!!!!!!!只实现了识别Markdown中的#代表的层级,所以不能使用其余标识符࿰…...
【Spring生命周期】Bean元信息配置阶段
引言 本系列将详细讲解Spring生命周期的13个阶段,从源码角度帮助我们更好的理解Spring框架和bean生命周期全流程 Bean信息定义4种方式 API的方式Xml文件方式properties文件的方式注解的方式 在 Spring 框架中,Bean 元信息配置阶段是整个 Bean 生命周…...
【iOS】SwiftUI状态管理
State ObservedObject StateObject 的使用 import SwiftUIclass CountModel: ObservableObject {Published var count: Int 0 // 通过 Published 标记的变量会触发视图更新init() {print("TimerModel initialized at \(count)")} }struct ContentView: View {State…...
ubuntu上如何查看coredump文件默认保存在哪个路径?
在 Ubuntu 系统中,可以通过以下几种方式来查看 coredump 文件默认保存的路径: 1. 查看core_pattern配置 core_pattern是一个内核参数,它决定了 coredump 文件的保存位置和命名规则。可以通过以下命令查看其当前值: cat /proc/s…...
技术总结汇总
目录 数据库 数据库系统原理 MySQL Redis Java Java 基础 Java 容器 Java 并发 Java 虚拟机 Java I/O 系统设计 系统设计基础 微服务 分布式 集群和负载均衡 灾备和故障转移 限流 降级和熔断 缓存 消息队列 设计模式 DDD领域驱动设计 开发框架和中间件…...
Java-如何将其他地方拉取的jar包导入本地maven环境
背景 公司的一个老旧二开项目,原项目维护方不合作了,提供的项目源码提供给到公司。项目中用到了一些原维护方内部的jar包,导致二开时依赖的这些部分全部报错。虽然在项目中直接导入此jar包可以解决报红报错问题,但是在使用maven打…...
Unity 聊天气泡根据文本内容适配
第一步 拼接UI 1、对气泡图进行九宫图切割 2、设置底图pivot位置和对齐方式 pivot位置:(0,1) 对齐方式:左上对齐 3、设置文本pivot位置和对齐方式,并挂上布局组件 pivot设置和对齐方式和底图一样&#…...
【组态PLC】基于博图V16和组态王六层双部电梯组态设计【含PLC组态源码 M008期】
控制要求 1)两台电梯同时运行时,共同享用一套外呼按钮。 2)当两台电梯同时去响应外呼信号时,两台电梯自动定向启动前往相应的楼层,当某一台电梯先行到达指定层楼时,另外一台电梯必须就近停靠平层…...
Python--数据类型(中)
1. 列表(list) 1.1 定义与特性 定义:有序、可变的容器,支持多种数据类型混合存储。 user_list ["奥力给", 98, True] empty_list [] # 空列表可变性:列表内部元素可修改,区别于字符串和元组。…...
学习总结2.19
首先就是对dfs和bfs的熟悉,dfs是一种递归函数,通过不断深搜来达到目的,通常用于寻找多少未知量,相较于bfs,编译难度更低一点;bfs多用于寻找最短路径之类,相较于dfs代码多了一部分队列的代码&…...
[Vivado报错] [Runs 36-527] DCP does not exist
一、错误原因解析 此错误表明Vivado在指定路径未找到.dcp(Design Checkpoint)文件,通常由以下原因导致: 路径过长或特殊字符:Windows系统路径长度限制(260字符)可能导致文件生成失败ÿ…...
深度学习的集装箱箱号OCR识别技术,识别率99.9%
集装箱箱号OCR识别技术是一项结合计算机视觉和规则校验的复杂任务,以下是其关键要点及实现思路的总结: 1、集装箱号结构:11位字符,格式为公司代码(3字母)和序列号(6数字)以及校验码(1数字)和尺寸/类型代码(可选),例如…...
基于java新闻管理系统,推荐一款开源cms内容管理系统ruoyi-fast-cms
一、项目概述 1.1 项目背景 在信息高速流通的当下,新闻媒体行业每天都要处理和传播海量信息。传统的新闻管理模式依赖人工操作,在新闻采集、编辑、发布以及后续管理等环节中,不仅效率低下,而且容易出现人为失误。同时࿰…...
网络安全要学python 、爬虫吗
网络安全其实并不复杂,只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分:web安全和二进制逆向安全。web安全是网络安全的入门方向,内容简单,就…...
ChatGPT行业热门应用提示词案例-AI绘画类
AI 绘画指令是一段用于指导 AI 绘画工具(如 DALLE、Midjourney 等)生成特定图像的文本描述。它通常包含场景、主体、风格、色彩、氛围等关键信息,帮助 AI 理解创作者的意图,从而生成符合要求的绘画作品。 ChatGPT 拥有海量的知识…...
网络安全钓鱼邮件测试 网络安全 钓鱼
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 如今,网络安全是一个备受关注的话题,“网络钓鱼”这个词也被广泛使用。 即使您对病毒、恶意软件或如何在线保护自己一无所知,您…...
写一个python组件
写一个python组件 核心功能代码命令行接口打包配置安装与测试注意 写一个python组件,具体的:项目结构设计:定义你的项目的目录结构。编写核心功能代码:实现你想要的功能。创建命令行接口(CLI):使用argparse或click库来…...
deepseek-v3在阿里云和腾讯云的使用中的差异
随着deepseek在各大云商上线,试用了下阿里云和腾讯云的deepseek服务,在回答经典数学问题9.9和9.11谁大时,发现还是有差异的。将相关的问题记录如下。 1、问题表现 笔者使用的openai的官方sdk go-openai。 因本文中测验主要使用阿里云和腾讯…...
DevOps自动化部署详解:从理念到实践
在软件开发日益快速迭代的今天,如何以高效、稳定且可重复的方式将代码变更从开发环境自动部署到生产环境成为企业竞争的重要因素。DevOps 正是在这一背景下应运而生,它打破开发、测试、运维之间的壁垒,通过自动化工具和流程,实现持…...
systemverilog刷题小记
1、systemverilog的队列特性 1.1队列的基础操作 方法语法时间复杂度示例结果头部插入q.push_front(item)O(1)q.push_front(5)[5, ...]尾部插入q.push_back(item)O(1)q.push_back(8)[..., 8]头部删除q.pop_front()O(1)x q.pop_front()[...]尾部删除q.pop_back()O(1)x q.pop_…...
jetbrains IDEA集成大语言模型
一、CodeGPT CodeGPT是由CSDN打造的一款生成式AI产品,专为开发者量身定制。它能够提供强大的技术支持,帮助开发者在学习新技术或解决实际工作中的各种计算机和开发难题1。 idea集成 1.在线安装:直接在线安装 2.离线安装 JetBrains Mar…...
23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成
文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台(已集成 DeepSeek 大模型)1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…...
Ubuntu学习备忘
1. 打开Terminal快捷键 ctrl alt t 2.Ubuntu22.04的root没有默认初始密码, 为root设置密码,下面链接的step1, How to allow GUI root login on Ubuntu 22.04 Jammy Jellyfish Linux - LinuxConfig...
AI 编程助手 cursor的系统提示词 prompt
# Role 你是一名极其优秀具有10年经验的产品经理和精通java编程语言的架构师。与你交流的用户是不懂代码的初中生,不善于表达产品和代码需求。你的工作对用户来说非常重要,完成后将获得10000美元奖励。 # Goal 你的目标是帮助用户以他容易理解的…...
DAO设计模式
DAO设计模式 1.概念 DAO(Data Access Object)模式是一种用于分离业务逻辑与数据访问逻辑的设计模式,其核心思想是通过抽象接口屏蔽底层数据操作细节,提升代码的可维护性和扩展性。 2.DAO模式的定义与核心思想 DAO模式属于J…...
为什么外贸办公需要跨境专线网络?
你好,今天我们来聊聊SD-WAN技术在出海企业办公中的应用以及其带来的诸多优势。当今出海企业在与海外分支机构或合作伙伴开展高效的网络通讯和数据传输时,面临着许多挑战。此时,SD-WAN作为一种新兴的网络优化技术,正在改变这些企业…...
挪车小程序挪车二维码php+uniapp
一款基于FastAdminThinkPHP开发的匿名通知车主挪车微信小程序,采用匿名通话的方式,用户只能在有效期内拨打车主电话,过期失效,从而保护车主和用户隐私。提供微信小程序端和服务端源码,支持私有化部署。 更新日志 V1.0…...
【Pandas】pandas Series reindex
Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...
HTML/CSS中并集选择器
1.作用:选中多个选择器对应的元素,又称:分组选择器 所谓并集就是或者的含义. 2.语法:选择器1,选择器2,选择器3,......选择器n 多个选择器通过,连接,此处,的含义就是:或. .rich,.beauty{color: blue;} 3.注意事项 1.并集选择器,我们一般竖着写 2.任何形式的选择器,都可以作为并…...
一台服务器将docker image打包去另一天服务器安装这个镜像
一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…...
【分布式理论14】分布式数据库存储:分表分库、主从复制与数据扩容策略
文章目录 一、分表分库1. 数据分表的必要性与方式2. 数据分库原则与优势 二、主从复制1. 读写分离架构设计2. 数据复制方式3. MySQL实现主从复制4. MySQL主从复制实践与高可用方案 三、数据扩容 随着业务的不断发展和数据量的增长,传统的单机关系型数据库已经逐渐不…...
SIM盾构建安全底座的可行性分析
一、背景 1.1安全需求现状 在数字化时代,信息安全面临着日益严峻的挑战。各类网络攻击手段层出不穷,如数据泄露、恶意软件攻击、网络诈骗等,给个人、企业和社会带来了巨大的损失。为了保障信息系统的安全性,需要构建一个可靠的安…...
ai大模型加本地知识库
cherrystudio 搭建本地知识库,并配置Ollama 本地部署的DS模型,或在线的千问模型 千问文本模型推荐:...
DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析:如何…...
【插件】前端生成word 文件
文章目录 1、背景2、方式一:html-docx-js2.1 具体代码2.2 前端生成word文件的样式2.3 总结 3、方式二:pizzip docxtemplater3.1 具体代码3.2 前端生成word文件的样式3.3 总结 4、参考链接 1、背景 在实际开发中,业务需要,需要把数…...
软件测试用例设计方法之正交表
一、概念 能够使用最小的测试过程集合获得最大的测试覆盖率,从全面试验中挑选出有代表性的点进行测试。适用于配置类软件,组合比较多的情况。 正交表Ln(m^k): 特点:均匀分散、整齐可比、高效、快速、经济 n:正交表的…...
数组和对象深浅拷贝
对象浅拷贝 方法一:使用 Object.assign() Object.assign() 方法用于将一个或多个源对象的所有可枚举属性复制到目标对象。它会返回目标对象。 const originalObj {name: John,age: 30,hobbies: [reading, running] };const shallowCopy Object.assign({}, orig…...
NPM环境搭建指南
NPM(Node Package Manager)是 Node.js 的包管理工具,堪称前端开发的基石。本文将手把手教你 在Mac、Windows、Linux三大系统上快速搭建NPM环境,并验证是否成功。 一、Mac系统安装NPM 方法1:通过Homebrew安装ÿ…...
C#功能测试
List 内部元素为引用 src[0]为"11" List<Source> src new List<Source>(); src.Add(new Source() { Name "1", Age 1, Description "1" }); src.Add(new Source() { Name "2", Age 2, Description "2"…...
Mongoose 详解
为 Node.js 与 MongoDB 之间提供了一个更高级、更便捷的交互方式。 一、安装 # 使用 npm 安装npm install mongoose 二、基本使用 1. 连接数据库 const mongoose require("mongoose");// 数据库连接 URIconst uri "mongodb://localhost:27017/myDatabase…...