← [ BACK_TO_NOTES ]

Promise 链

解释 then 链如何传值、吞错与返回 Promise 的扁平化,避免回调金字塔回潮。

#concept #growing #dev #javascript

[!info] related notes

Promise 链

这个概念为什么出现

多个异步步骤若嵌套回调会难读;若错误 then 链却不 return,会出现“断链”与未处理 rejection。

[!abstract] 一句话理解 每个 then 返回新 Promise;返回值成为下一环入参,抛错或返回 rejected Promise 进入失败链。

最小示例

Promise.resolve(1)
  .then((n) => n + 1)
  .then((n) => {
    if (n < 0) throw new Error('neg')
    return n * 10
  })
  .then((n) => console.log('ok', n))
  .catch((e) => console.log('err', e.message))

期望:ok 20。

关键规则

  1. then 里 return 普通值 → 下一环 fulfilled
  2. return Promise → 扁平衔接
  3. throw → 走 catch
  4. catch 后还可继续 then(恢复)

常见误区

[!warning] 常见误区:then 中开了 Promise 却不 return 外层不会等它,错误也可能丢失。

本节总结

链式 then 的本质是组合新 Promise;return 是契约。

自测题

  1. catch 之后是否还能 then?
参考答案

能;catch 正常返回后后续 then 收到恢复后的值。

学习检查

  1. 每次 then 为什么都会返回一个新的 Promise?
  2. then callback 返回普通值、Promise、throw error 时,下一环分别进入什么状态?
  3. 为什么在 then 内启动异步任务却不 return 会造成“断链”?
  4. catch 正常返回后为什么后续 then 还能继续?
  5. 给一个三步异步流程,把嵌套回调改写成不会丢错误的 Promise chain。
创建于 2025/1/1 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本