promise构造函数通过执行器函数控制异步操作状态转换,接收resolve和reject参数,状态一旦确定(fulfilled/rejected)不可逆,且只能转换一次;常配合.then()和.catch()链式处理结果与错误。

Promise 构造函数是创建自定义 Promise 实例的底层方式,它让你明确控制异步操作的执行时机、成功或失败的触发逻辑,以及状态(pending → fulfilled 或 rejected)的转换过程。
Promise 构造函数的基本结构
构造函数接收一个执行器函数(executor),该函数立即同步执行,并接收两个参数:resolve 和 reject。它们都是由 JavaScript 引擎提供的函数,用于手动改变 Promise 的状态。
用法示例:
const myPromise = new Promise((resolve, reject) => {
// 模拟异步操作,比如网络请求或定时任务
setTimeout(() => {
const success = Math.random() > 0.3;
if (success) {
resolve("操作成功!"); // → 状态变为 fulfilled,值为 "操作成功!"
} else {
reject(new Error("操作失败")); // → 状态变为 rejected,原因是一个 Error 对象
}
}, 1000);
});
状态只能转换一次,且不可逆
Promise 的状态有三种:pending(初始)、fulfilled(已成功)、rejected(已失败)。一旦调用 resolve 或 reject,状态就锁定,后续再调用另一个函数不会生效。
常见误写(无效):
new Promise((resolve, reject) => {
resolve("第一次");
reject(new Error("第二次")); // ← 不会生效,状态已变为 fulfilled
});
所以,实际使用中建议配合 return 或条件分支,避免意外调用:
- 在 resolve 后加 return,阻止后续代码执行
- 用 if/else 或 try/catch 明确分流逻辑
- 不要在回调里多次调用 resolve/reject
resolve 和 reject 的参数含义不同
resolve(value):将 Promise 变为 fulfilled,value 成为 .then() 中第一个回调函数的入参。value 可以是任意类型(包括另一个 Promise)。
reject(reason):将 Promise 变为 rejected,reason 通常是一个 Error 实例(便于调试和统一错误处理),但也可以是字符串、对象等——不过不推荐用非 Error 类型。
推荐写法:
-
resolve(data)—— 传业务数据 -
reject(new Error("网络超时"))—— 错误信息带堆栈上下文 - 避免
reject("网络超时")(丢失错误类型和追踪能力)
结合 .then() 和 .catch() 使用
构造出的 Promise 实例可通过链式方法响应状态变化:
myPromise
.then(result => {
console.log(result); // "操作成功!"
})
.catch(error => {
console.error(error.message); // "操作失败"
});
注意:
– .then() 接收两个可选参数:onFulfilled 和 onRejected,但更推荐只传 onFulfilled,用 .catch() 统一捕获错误;
– .catch() 等价于 .then(null, onRejected),能捕获前面任意环节抛出的错误(包括 .then 回调里的异常)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











