Promise链式调用的核心是每个.then()或.catch()返回新Promise以形成顺序链条;回调返回值自动包装为Promise,支持数据转换与错误捕获;需注意return缺失、嵌套then及.catch()位置等陷阱。

Promise 链式调用的核心是:每个 .then() 或 .catch() 方法都返回一个新的 Promise,从而让后续操作可以继续接在后面,形成顺序执行的链条。
用 .then() 串联异步任务
每次 .then() 的回调函数返回值(无论普通值还是 Promise)都会被自动包装成 Promise,作为下一个 .then() 的输入。
例如:
fetch('/api/user')
.then(res => res.json())
.then(user => fetch(`/api/posts?userId=${user.id}`))
.then(res => res.json())
.then(posts => console.log('文章列表:', posts))
.catch(err => console.error('出错了:', err));
这里每一步都等前一步完成后再执行,天然保证了时序。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
立即学习“Java免费学习笔记(深入)”;
在链中处理中间结果或转换数据
你可以在任意 .then() 中对上一步的结果做加工,只要返回值能被下一级接收即可:
- 返回普通值 → 下一个
.then()接收到该值 - 返回 Promise → 下一个
.then()等它 resolve 后再执行 - 抛出错误或返回
Promise.reject()→ 跳转到最近的.catch()
用 .catch() 统一捕获异常
.catch() 实际是 .then(null, onRejected) 的简写,会捕获链中任意环节抛出的错误(包括 Promise reject 和同步 throw):
doStep1()
.then(doStep2)
.then(doStep3)
.catch(err => {
// 这里能捕获 doStep1、doStep2、doStep3 中任意一个失败
console.log('任一环节失败:', err);
});
注意:如果某个 .then() 内部自己用了 .catch() 并“吞掉”了错误,就不会继续向后传递。
避免常见陷阱
-
不要在链中漏掉 return:比如
.then(() => { fetch(...) })没有 return,会导致下一个.then()立即执行,而不是等待 fetch 完成 -
避免嵌套 then:不要写
.then(() => { ... .then(...) }),应展开为平级链式调用 -
慎用多个
.catch():除非需要分层错误处理,否则统一放在链末尾更清晰

















