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

为何res.json()与then()组合不会返回Promise<Promise<Thing>>?

为什么then不会返回Promise类型?

这是因为Promise的then方法有**自动解包(unwrap)**的特性,专门用来避免这种嵌套Promise的情况。

咱们一步步拆解你的代码:

  1. fetch(someApi) 首先返回一个Promise<Response>,它resolve后的值是一个Response对象。
  2. 第一个.then((res)=>res.json()):这里的回调返回的是res.json(),而res.json()本身是一个Promise<JSON>。但then方法不会直接把这个Promise当成返回值包装成新的Promise,而是会等待这个内部Promise完成:
    • 当res.json()成功resolve出JSON数据时,第一个then返回的Promise就会用这个JSON数据作为自己的resolve值;
    • 如果res.json()失败reject,第一个then返回的Promise也会跟着reject。
      所以第一个then最终返回的是Promise<JSON>,而不是Promise<Promise<JSON>>。
  3. 第二个.then((data)=>data):这个回调直接返回接收的JSON数据(非Promise值),then会把它包装成一个新的Promise<JSON>返回,这就是你最终拿到的结果。

总结一下then的返回规则:

  • 如果回调返回普通值(非Promise),then返回的Promise会用这个值resolve;
  • 如果回调返回Promise,then返回的Promise会自动"展开"这个Promise,直接继承它的最终状态和结果,不会嵌套。

内容的提问来源于stack exchange,提问作者Fntsia12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:42:06