Promise链式调用的核心是隐式值传递:每个then的成功回调返回值(普通值、Promise或undefined)自动包装成Promise并传给下一个then;catch不中断链,其返回值成为后续then的输入。

后一个 then 通过接收前一个 then 的回调函数的返回值,自动作为自己的参数传入——这是 Promise 链式调用的核心机制。
Promise 链的值传递是隐式的
每个 then 的成功回调(第一个参数)如果返回一个值(包括普通值、Promise、undefined),这个返回值会**自动包装成 Promise**,并成为下一个 then 回调的输入参数。
- 返回普通值(如字符串、数字、对象)→ 下一个
then的参数就是该值 - 返回 Promise → 下一个
then等待它 resolve 后,接收其 fulfilled 值 - 不写 return 或返回 undefined → 下一个
then的参数为undefined
常见写法示例
比如:
Promise.resolve(10) .then(x => x * 2) // 返回 20 .then(y => y + 5) // y 就是前一步返回的 20,这里得到 25 .then(z => console.log(z)); // 输出 25
再比如异步场景:
立即学习“Java免费学习笔记(深入)”;
fetch('/api/user')
.then(res => res.json()) // 解析响应,返回 Promise
.then(user => user.name) // 等前一个 Promise resolve 后,user 就是解析出的对象
.then(name => console.log(name)); // 输出用户名注意:不要在 then 里直接 return 多个值
JavaScript 函数只能返回一个值。如果想传多个数据,需用数组或对象封装:
-
then(data => [data.id, data.name])→ 下一个then参数是数组 -
then(data => ({ id: data.id, name: data.name }))→ 下一个then参数是对象
错误处理不影响数据流
catch 不会中断链(除非它自己抛错或返回被 reject 的 Promise),且 catch 后的 then 接收的是 catch 回调的返回值,不是原始错误:
Promise.reject('fail')
.catch(err => { console.error(err); return 'recovered'; })
.then(msg => console.log(msg)); // 输出 'recovered'不复杂但容易忽略


















