You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅地链式调用两个Promise并返回第二个Promise的类型?

如何优雅地链式调用两个Promise并返回第二个Promise的类型?

嗨,这个场景我之前也碰到过,重复写两次P2确实有点别扭,给你几个更优雅的解决方案:

方法一:用async/await实现(最直观)

这种方式可读性拉满,逻辑一目了然——不管P1成功还是失败,我们都先等它执行完,然后直接返回P2的结果:

async function chained(): Promise<number> {
  try {
    await P1();
  } catch {
    // 这里无需额外处理,只是捕获P1的错误让程序继续执行
  }
  return P2();
}

方法二:用catch+then链式调用(简洁一行版)

如果你偏好链式写法,可以用catch捕获P1的所有错误(直接忽略错误),再链式调用then执行P2,这样只需要写一次P2:

function chained(): Promise<number> {
  return P1().catch(() => {}).then(P2);
}

这里的catch(() => {})会把P1的失败状态转为成功状态,后续的then就一定会执行P2,最终返回的就是P2的Promise<number>类型。

为什么finally不行?

你提到的finally确实能保证P2执行,但它的设计目的是做清理操作,不会改变原Promise的返回值——哪怕你在finally里返回了P2,最终Promise的结果还是P1的结果(只有当P2本身拒绝时,才会改变最终Promise的状态),所以类型会保持P1的Promise<void>,不符合你的需求。

备注:内容来源于stack exchange,提问作者Nu Nunu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:59:27