promise是es6处理异步的标准方式,具有pending→fulfilled/rejected的不可逆状态流转,支持then/catch链式调用、错误集中捕获及all/race/finally等组合方法。

ES6 的 Promise 是处理异步操作的标准化方式,它用可预测的状态流转(pending → fulfilled 或 rejected)替代了层层嵌套的回调函数,让逻辑更平铺、错误更集中、链式更自然。
Promise 的三种状态与不可逆性
每个 Promise 实例初始为 pending(等待中),之后只能单向变为:fulfilled(成功,对应 resolve 调用)或 rejected(失败,对应 reject 调用)。状态一旦确定,就不可更改,后续无论多少次调用 then/catch,都直接拿到最终结果。
- resolve(value) 把状态设为 fulfilled,value 成为 PromiseResult
- reject(reason) 把状态设为 rejected,reason 成为 PromiseResult
- 未捕获的异常会自动触发 rejected 状态
用 then 和 catch 实现链式响应
then 方法接收两个回调:第一个处理 fulfilled 状态,第二个(可选)处理 rejected;catch 则专门捕获链中任意环节抛出的错误,等价于 .then(null, onRejected)。
- 每次 then 都返回一个新 Promise,支持继续链式调用
- 如果 then 回调返回普通值(如字符串、数字),新 Promise 状态为 fulfilled,值即该返回值
- 如果返回另一个 Promise,新 Promise 状态和结果将由它决定
- catch 会捕获前面所有 then 中的错误,包括 resolve 后抛出的异常
常见组合模式:all、race、finally
Promise 提供了多个静态方法来管理多个异步任务:
- Promise.all([p1, p2, ...]):全部成功才 fulfilled,任一 rejected 整体就 rejected
- Promise.race([p1, p2, ...]):谁先改变状态(fulfilled 或 rejected),结果就取谁
- .finally(() => {...}):无论成功失败都会执行,适合清理资源(如关闭 loading)
实际封装一个异步请求示例
把 wx.request 封装成 Promise,避免回调嵌套,也方便复用:
const request = (options) => {return new Promise((resolve, reject) => {
wx.request({
...options,
success: (res) => resolve(res),
fail: (err) => reject(err)
});
});
};
// 使用时可链式处理
request({ url: '/login' })
.then(res => {
console.log('登录成功', res.data);
return request({ url: '/user', data: { id: res.data.userId } });
})
.then(userRes => console.log('用户信息', userRes.data))
.catch(err => console.error('流程中断', err));
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











