为何res.json()与then()组合不会返回Promise<Promise<Thing>>?
为什么then不会返回Promise类型?
这是因为Promise的then方法有**自动解包(unwrap)**的特性,专门用来避免这种嵌套Promise的情况。
咱们一步步拆解你的代码:
fetch(someApi)首先返回一个Promise<Response>,它resolve后的值是一个Response对象。- 第一个
.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>>。
- 当
- 第二个
.then((data)=>data):这个回调直接返回接收的JSON数据(非Promise值),then会把它包装成一个新的Promise<JSON>返回,这就是你最终拿到的结果。
总结一下then的返回规则:
- 如果回调返回普通值(非Promise),
then返回的Promise会用这个值resolve; - 如果回调返回Promise,
then返回的Promise会自动"展开"这个Promise,直接继承它的最终状态和结果,不会嵌套。
内容的提问来源于stack exchange,提问作者Fntsia12
相关产品推荐
相关产品推荐

