javascript Promise是什么_如何使用它


Promise 是 JavaScript 处理异步操作的标准对象,代表未来完成或失败的操作,具有 pending、fulfilled、rejected 三种不可逆状态;通过 new Promise() 创建,支持链式调用(.then/.catch)、静态方法(all/race/resolve/reject)及 async/await 语法。

Promise 是 JavaScript 中处理异步操作的标准化对象,它代表一个**尚未完成但未来会完成(或失败)的操作**,让你能以更清晰、可链式的方式管理回调,避免“回调地狱”。

Promise 的三种状态

每个 Promise 实例始终处于以下其中一种状态:

  • pending(待定):初始状态,既没成功也没失败
  • fulfilled(已成功):操作成功完成,可通过 .then() 获取结果
  • rejected(已失败):操作出错,可通过 .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 


相关栏目: 【 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

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.