javascript Promise是什么_如何使用它
发布时间 - 2025-12-26 00:00:00 点击率:次Promise 是 JavaScript 处理异步操作的标准对象,代表未来完成或失败的操作,具有 pending、fulfilled、rejected 三种不可逆状态;通过 new Promise() 创建,支持链式调用(.then/.catch)、静态方法(all/race/resolve/reject)及 async/await 语法。
Promise 是 JavaScript 中处理异步操作的标准化对象,它代表一个**尚未完成但未来会完成(或失败)的操作**,让你能以更清晰、可链式的方式管理回调,避免“回调地狱”。
Promise 的三种状态
每个 Promise 实例始终处于以下其中一种状态:
- pending(待定):初始状态,既没成功也没失败
-
fulfilled(已成功):操作成功完成,可通过
.then()获取结果 -
rej
ected(已失败):操作出错,可通过 .catch()或.then(null, handler)捕获错误
状态一旦改变(pending → fulfilled 或 pending → rejected),就不可逆,也不会再变。
如何创建和使用 Promise
用 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.all、Promise.race、Promise.resolve/reject
这些方法帮你更高效地组合多个 Promise:
-
Promise.all([p1, p2, p3]):全部成功才成功,返回结果数组;任一失败则整体失败 -
Promise.race([p1, p2, p3]):谁先改变状态(无论成功/失败),就采用它的结果 -
Promise.resolve(value):快速创建一个已成功的 Promise(如包装普通值或已有 thenable) -
Promise.reject(reason):快速创建一个已失败的 Promise
与 async/await 配合更简洁
Promise 是 async/await 的基础。用 async 声明的函数自动返回 Promise,await 可暂停执行,等待 Promise 完成:
async function getUser() {
try {
const user = await fetchUser; // 等待 Promise 完成
console.log("用户:", user);
return user;
} catch (err) {
console.error("加载失败:", err);
}
}
这比纯 Promise 链读起来更接近同步代码,也更容易调试和错误处理。
# javascript
# java
# ai
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Laravel如何实现数据库事务?(DB Facade示例)
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
Android Socket接口实现即时通讯实例代码
动图在线制作网站有哪些,滑动动图图集怎么做?
微信小程序 canvas开发实例及注意事项
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Laravel怎么清理缓存_Laravel optimize clear命令详解
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
如何用AWS免费套餐快速搭建高效网站?
如何用虚拟主机快速搭建网站?详细步骤解析
如何确保FTP站点访问权限与数据传输安全?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
如何在阿里云虚拟服务器快速搭建网站?
微信小程序 五星评分(包括半颗星评分)实例代码
nginx修改上传文件大小限制的方法
Mybatis 中的insertOrUpdate操作
Laravel如何实现本地化和多语言支持?(i18n教程)
Linux网络带宽限制_tc配置实践解析【教程】
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何快速重置建站主机并恢复默认配置?
制作电商网页,电商供应链怎么做?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
如何快速搭建高效香港服务器网站?
Laravel中的Facade(门面)到底是什么原理
Laravel如何实现API速率限制?(Rate Limiting教程)
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
千库网官网入口推荐 千库网设计创意平台入口
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
javascript读取文本节点方法小结
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
香港服务器租用费用高吗?如何避免常见误区?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
微信小程序 HTTPS报错整理常见问题及解决方案
下一篇:Linux下JDK安装教程
下一篇:Linux下JDK安装教程


ected(已失败):操作出错,可通过