Promise 是 JavaScript 处理异步操作的标准对象,代表未来完成或失败的操作,具有 pending、fulfilled、rejected 三种不可逆状态;通过 new Promise() 创建,支持链式调用(.then/.catch)、静态方法(all/race/resolve/reject)及 async/await 语法。
Promise 是 JavaScript 中处理异步操作的标准化对象,它代表一个**尚未完成但未来会完成(或失败)的操作**,让你能以更清晰、可链式的方式管理回调,避免“回调地狱”。
每个 Promise 实例始终处于以下其中一种状态:
.then() 获取结果.catch() 或 .then(null, handler) 捕获错误状态一旦改变(pending → fulfilled 或 pending → rejected),就不可逆,也不会再变。
用 new Promise() 构造函数创建,它接收一个执行器函数(executor),该函数立即执行,并传入两个参数:resolve(成功时调用)和 reject(失败时调用)。
例如,模拟一个 1 秒后返回用户数据的异步请求:
const fetchUser = new Promise((resolve, reject) => {
setTimeout(() => {
const success = Math.random() > 0.2; // 80% 概率成功
if (success) {
resolve({ id: 123, name: "张三" });
} else {
reject(new Error("网络请求失败"));
}
}, 1000);
});
使用时推荐链式调用:
fetchUser
.then(user => {
console.log("获取成功:", user);
return user.name.toUpperCase();
})
.then(upperName => console.log("大写姓名:", upperName))
.catch(err => console.error("出错了:", err.message));
这些方法帮你更高效地组合多个 Promise:
Promise.all([p1, p2, p3]):全部成功才成功,返回结果数组;任一失败则整体失败Promise.race([p1, p2, p3]):谁先改变状态(无论成功/失败),就采用它的结果Promise.resolve(value):快速创建一个已成功的 Promise(如包装普通值或已有 thenable)Promise.reject(reason):快速创建一个已失败的 PromisePromise 是 async/await 的基础。用 async 声明的函数自动返回 Promise,await 可暂停执行,等待 Promise 完成:
async function getUser() {
try {
const u
ser = await fetchUser; // 等待 Promise 完成
console.log("用户:", user);
return user;
} catch (err) {
console.error("加载失败:", err);
}
}
这比纯 Promise 链读起来更接近同步代码,也更容易调试和错误处理。
# javascript
# java
# ai
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
windows如何备份注册表_windows导出和导入注册表文件教程
Win11如何设置省电模式 Win11开启电池节电功能【优化】
php485在php5.6下能用吗_php485旧版本兼容性问题说明【详解】
如何使用Golang构建简易投票统计功能_Golang投票数据汇总与展示示例
Win11玩游戏全屏闪退怎么办_Win11全屏优化禁用设置【教程】
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
VSC怎样在VSC中调试PHPAPI_接口调试技巧【详解】
VSC怎么创建PHP项目_从零开始搭建项目的步骤【操作】
Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】
如何使用正则表达式提取以编号开头、后接多个注解的逻辑分组块
Win11怎么设置默认邮件应用_Windows11应用关联Mail设置
How to Properly Use NumPy in VS Code
Go 语言标准库为何不提供泛型 Contains 方法?
LINUX怎么进行文本内容搜索_Linux grep命令正则表达式用法大全【教程】
Win11怎么硬盘分区 Win11新建磁盘分区详细教程【步骤】
Win10系统映像怎么恢复 Win10使用系统映像还原电脑【指南】
使用类变量定义字符串常量时如何实现类型安全的 Literal 注解
PHP 中如何在函数内持久修改引用变量所指向的目标
Mac如何整理桌面文件_Mac使用堆栈功能一键整理
ACF 教程:正确更新嵌套在多层 Group 字段内的子字段
如何在包含多值的列中精准搜索指定演员?
Python变量绑定机制_引用模型解析【教程】
新手学PHP架构总混淆概念咋办_重点梳理【教程】
php8.4匿名类怎么用_php8.4匿名类创建与使用场景【介绍】
Win11怎么关闭系统透明度_Windows11个性化颜色透明效果
如何在Golang中处理JSON字段缺失_Golangjson解析字段校验方法
Win11怎么关闭自动调节亮度_Windows11禁用内容自适应亮度
php485返回数据不完整怎么办_php485数据分包重组处理方法【教程】
Win11怎么关闭键盘按键音_Win11禁用打字声音反馈【教程】
如何使用Golang理解结构体指针方法接收者_Golang修改字段实践
如何使用Golang优化模块引入路径_Golanggo mod tidy清理与优化方法
Win11怎么查看已连接wifi密码 Win11查已连wifi密码步骤【教程】
c++中如何使用auto关键字_c++11类型推导用法说明
Win11文件扩展名怎么显示_Win11查看文件后缀名设置【基础】
如何用正则表达式精确匹配最多含一个换行符的起止片段
Win11如何更新显卡驱动 Win11检查和安装设备驱动程序【方法】
如何在 PHP 中按相同键合并两个关联数组为二维数组
Win11如何设置环境变量 Win11添加和修改系统与用户变量【教程】
如何在Golang中实现CI/CD流水线自动化测试_Golang持续集成测试执行方法
Win10如何更改开机密码_Windows10登录选项更改密码
PHP怎么接收前端传的时间戳_处理时间戳参数转换技巧汇总【指南】
Win11无法识别耳机怎么办_解决Win11插耳机没声音问题【步骤】
Windows任务计划服务异常原因_任务调度失败的处理方案
c++中的Tag Dispatching是什么_c++利用标签分发优化函数重载【元编程】
Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】
PHP 中如何在函数内持久化修改引用变量的指向
手机php文件怎么变成mp4_安卓苹果打开php转mp4方法【教程】
Win10怎么创建桌面快捷方式 Win10为应用创建快捷方式【步骤】
Win10怎样清理C盘阿里旺旺缓存_Win10清理阿里旺旺缓存步骤【步骤】
Python爬虫项目实战教程_Scrapy抓取与存储数据实例
2025-12-26
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。