promise 是代表异步操作最终结果的对象,通过 new promise(executor) 创建,executor 同步执行并用 resolve/reject 控制状态流转;其状态仅含 pending、fulfilled、rejected 三种,且不可逆;.then() 处理成功,.catch() 捕获失败,.finally() 无论成败均执行。

Promise 是 JavaScript 中处理异步操作的核心机制,它代表一个**尚未完成但最终会有结果**的异步任务。创建 Promise 的关键是用 new Promise() 构造函数,并在执行器(executor)函数中通过 resolve 和 reject 控制其状态流转。
如何创建一个 Promise 实例
Promise 构造函数接收一个执行器函数作为参数,该函数立即执行,且有两个固定参数:resolve(成功时调用)和 reject(失败时调用)。注意:执行器内部的代码是同步运行的,但 Promise 本身代表的是异步结果。
- 调用
resolve(value)→ Promise 进入 fulfilled 状态,后续.then()可获取该value - 调用
reject(reason)→ Promise 进入 rejected 状态,后续.catch()或.then(null, fn)可捕获reason - 未调用任一函数,Promise 会一直停留在 pending 状态(不会自动超时或失败)
示例:
const p = new Promise((resolve, reject) => {setTimeout(() => resolve("加载完成"), 1000);
});
Promise 的三种基本状态与转换规则
Promise 只有三种状态:pending(待定)→ fulfilled(已成功) 或 pending → rejected(已失败)。一旦状态改变,就不可逆,也不会再变。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- pending:初始状态,既不是成功也不是失败
-
fulfilled:操作成功完成,可通过
.then(value => {...})获取值 -
rejected:操作失败,可通过
.catch(err => {...})或.then(null, err => {...})捕获错误
注意:Promise 状态只能由内部执行器决定,外部无法手动修改;多次调用 resolve 或 reject 只有第一次生效。
用 .then() 和 .catch() 处理状态结果
.then() 接收两个可选回调:第一个处理 fulfilled 状态,第二个处理 rejected 状态(不推荐这样写);.catch() 是专门捕获 rejected 状态的语法糖,等价于 .then(null, onRejected)。
-
.then(onFulfilled):只监听成功,失败会穿透到下一个.catch() -
.then(onFulfilled, onRejected):当前层级捕获错误,但不会阻止后续链式调用中的错误传播 -
.catch(onRejected):推荐写法,集中处理前面任意环节抛出的错误(包括throw和reject) -
.finally(callback):无论成功失败都会执行,常用于清理工作(如关闭 loading)
示例链式调用:
fetch("/api/data").then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error("请求失败:", err))
.finally(() => console.log("请求结束"));
常见易错点与实用建议
初学者容易忽略 Promise 的“一次性”和“不可逆”特性,导致逻辑异常。
- 不要在
resolve或reject后继续写可能出错的同步代码——它们不会中断执行,但后续错误可能被忽略 - 避免在
.then()中直接返回普通值(如return 42),这会自动包装成 resolved Promise;若需同步值,通常无需 Promise 包裹 - 使用
async/await时,try/catch可捕获 Promise rejection,但需确保 await 的确实是 Promise 实例 - 调试时可用
console.log(promise.status)?不行——Promise 实例没有公开的status属性,状态不可直接读取,只能通过回调感知
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










