promise链通过then串联异步操作,每个then返回promise或普通值,自动传递结果或等待完成,错误由catch捕获;需注意return、避免嵌套、合理错误处理及结合promise.all与async/await提升可读性。

Promise 链是 JavaScript 中组织异步操作最清晰、最常用的方式之一,特别适合把一个耗时业务拆成多个逻辑阶段依次执行(比如:校验 → 获取数据 → 处理 → 保存 → 返回结果)。
用 then 串起多个阶段,每个阶段返回新 Promise
每个 .then() 的回调函数可以处理上一阶段的结果,并返回一个新的 Promise —— 这个返回值会自动被链中下一个 .then() 接收。只要每个阶段都返回 Promise(或可被自动包装的值),链就不会中断。
- 如果返回普通值(如字符串、数字),下个
.then()会立刻收到它(等价于Promise.resolve(值)) - 如果返回 Promise,下个
.then()会等待它完成后再执行 - 如果抛出错误或返回被 reject 的 Promise,会跳转到最近的
.catch()
典型分阶段业务示例:用户下单流程
假设一个下单流程包含 4 个异步步骤:检查库存 → 计算价格 → 扣减库存 → 创建订单。可以这样写:
checkStock(itemId)
.then(stock => {
if (stock {
return deductStock(itemId, 1).then(() => price);
})
.then(price => {
return createOrder({ itemId, quantity: 1, amount: price });
})
.then(order => {
console.log('下单成功:', order.id);
return order;
})
.catch(err => {
console.error('下单失败:', err.message);
throw err; // 可选择继续抛出,供外层捕获
});
注意避免常见陷阱
-
不要在
.then()里忘记 return:不返回 Promise 会导致后续.then()立即执行,拿到undefined -
避免嵌套 Promise(“Promise 地狱”):用链式调用替代多层
.then().then().then()嵌套 -
错误处理要集中或明确:一个
.catch()能捕获链中任意阶段的异常,但也可在特定环节加局部.catch()做降级处理(如“扣减库存失败,尝试补偿”) -
需要并行 + 串行混合时,善用
Promise.all():例如“同时校验用户和商品”,再统一进入下一步
现代写法补充:配合 async/await 更易读
虽然 Promise 链本身足够强大,但如果阶段较多、逻辑较复杂,用 async/await 会让代码更接近同步风格:
async function placeOrder(itemId) {
try {
const stock = await checkStock(itemId);
if (stock
<p>本质仍是 Promise 链,只是语法糖;两者可混用(比如 <code>await</code> 一个由 <code>.then()</code> 构建的链)。</p>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











