网易首页 > 网易号 > 正文 申请入驻

深度指南:JS/TS Promise 从入门到精通,彻底告绝异步陷阱

0
分享至

在 JavaScript 的世界里,异步编程是灵魂。从早期的“回调地狱”到现在的 async/awaitPromise 始终是承上启下的核心。

无论你是刚入行的新手,还是准备面试的开发者,这篇全方位的 Promise 总结都值得你收藏。

一、 基础知识:Promise 到底是什么? 1. 三种状态

Promise 就像一份“未来的承诺”,它必然处于以下三种状态之一:

  • Pending(待定) :初始状态,既没有被兑现,也没有被拒绝。

  • Fulfilled(已兑现/成功) :操作成功完成。

  • Rejected(已拒绝/失败) :操作失败。

核心特性:状态一旦改变(从 Pending 变为 Fulfilled 或 Rejected),就不可逆转,且无法再次更改。
2. 执行顺序(微任务)

Promise 的回调属于微任务(Microtask)。在事件循环中,微任务的优先级高于 setTimeout 等宏任务。

二、 核心 API 全解析

掌握这些标准方法,能解决 90% 的异步场景。

1. 实例方法

  • ** .then() **:接收成功的结果。

  • ** .catch() **:捕获错误。

  • ** .finally() **:无论成功失败都会执行(常用于关闭 Loading 动画)。

2. 静态方法(并发控制)

方法

特点

适用场景

Promise.all([p1, p2])

全部成功才成功, 一个失败则全部失败

多个关联请求同时发送,缺一不可。

Promise.allSettled() 等待所有结果

,无论成功或失败。

批量任务处理,需知道每个任务的具体状态。

Promise.race() 谁快谁赢

,只取第一个完成的结果(不论成败)。

接口超时处理。

Promise.any()

只要有一个成功就成功;全部失败才失败。

多源镜像加速,取最快响应的可用资源。


三、 那些年我们踩过的 Promise 坑 1. 幽灵般的“静默失败”

现象:忘记写 .catch(),导致程序运行异常却没有任何日志。对策:全局监听 unhandledrejection 事件作为兜底,并在代码中养成随手 catch 的习惯。

2. 嵌套地狱的“变种”

虽然有了 Promise,但很多人还是写出了嵌套结构:

// ❌ 错误:Promise 套娃
getData().then(res => {
getOtherData(res).then(secondRes => {
// ...这和回调地狱没区别
})
})

// ✅ 正确:链式调用
getData()
.then(res => getOtherData(res))
.then(secondRes => updateView(secondRes))

3. 消失的返回值

.then() 内部如果没有 return,下一个链条接收到的值就是 undefined。这是导致业务逻辑断裂的最常见原因。

四、 TypeScript 中的进阶实践

在 TS 环境下,Promise 需要更严谨的对待:

1. 拒绝 Promise

明确定义返回类型。

interface User { id: number; name: string; }

// ✅ 明确标注返回类型,享受类型推导
async function getUser(id: number): Promise {
const res = await fetch(`/api/user/${id}`);
return res.json();
}

2. 异步循环的误区

forEach 中写 await 是无效的。

  • 错误list.forEach(async item => { await doSomething() }) —— 循环会瞬间结束。

  • 正确 :使用 for...of (串行)或 Promise.all(list.map(...)) (并行)。

五、 大厂避坑经验总结
  1. 始终返回 Promise :让你的函数具备“可组合性”。

  2. Await 嵌套优化 :如果两个异步操作没有依赖关系,不要串行 await ,请使用 Promise.all 提速。

// ❌ 慢了一倍
const a = await getA();
const b = await getB();

// ✅ 并行执行
const [a, b] = await Promise.all([getA(), getB()]);

  1. 异常捕获策略 :在异步函数中,优先使用 try...catch 配合 async/await ,它能让异步代码读起来像同步代码一样清晰。

结语

Promise 是异步编程的基石。理解它的状态流转、掌握并发控制 API、并在 TS 中保持类型严谨,能让你避开 99% 的生产环境 Bug。

避坑金句:

“如果一个函数返回 Promise,那么调用它时,要么 await 它,要么 return 它,要么 catch 它。”

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
比亚迪唐9系、汉9系旗舰车型官宣

比亚迪唐9系、汉9系旗舰车型官宣

IT之家
2026-01-10 20:09:05
蒋万安四岁时与母亲黄美伦的合影,母亲年轻时漂亮又有气质

蒋万安四岁时与母亲黄美伦的合影,母亲年轻时漂亮又有气质

大江
2026-01-09 16:27:54
特雷-杨:分手应该体面 得知交易将发生后我在去球馆的路上哭了

特雷-杨:分手应该体面 得知交易将发生后我在去球馆的路上哭了

北青网-北京青年报
2026-01-11 08:35:04
72%烟草倒挂逼哭零售户!宁可不订也不赔钱,市场根基正在烂根

72%烟草倒挂逼哭零售户!宁可不订也不赔钱,市场根基正在烂根

老特有话说
2026-01-07 00:40:03
广州消防通报黄埔一建筑工地起火:明火已扑灭,无人员伤亡

广州消防通报黄埔一建筑工地起火:明火已扑灭,无人员伤亡

南方都市报
2026-01-11 16:58:06
不管你信不信,男性过了61岁后,基本都有这7个现状,要坦然接受

不管你信不信,男性过了61岁后,基本都有这7个现状,要坦然接受

健康之光
2026-01-11 12:40:02
刘晓庆担心的事发生了!意外摔倒、分不清人,75岁不服老不行了?

刘晓庆担心的事发生了!意外摔倒、分不清人,75岁不服老不行了?

楠楠自语
2025-12-03 15:57:03
“卐”和“卍”,是啥意思?大部分人不会读!

“卐”和“卍”,是啥意思?大部分人不会读!

狼小妖
2026-01-11 00:21:34
尺寸超越劳斯莱斯库里南!全新ES9申报:蔚来迄今最大新车

尺寸超越劳斯莱斯库里南!全新ES9申报:蔚来迄今最大新车

快科技
2026-01-08 23:34:07
反制开始!星链多次威胁中国空间站后,我国新增20万颗卫星申请!

反制开始!星链多次威胁中国空间站后,我国新增20万颗卫星申请!

普陀动物世界
2026-01-11 14:09:50
妻子出轨院长,我给医院送锦旗:感谢院长为我妻子提供服务!

妻子出轨院长,我给医院送锦旗:感谢院长为我妻子提供服务!

云端小院
2026-01-11 09:53:49
就在刚刚,14家A股上市公司发布重大利空消息,看看都有哪些?

就在刚刚,14家A股上市公司发布重大利空消息,看看都有哪些?

股市皆大事
2026-01-11 08:55:59
哈梅内伊下令革命卫队平乱,伊朗在一夜间转危为安?

哈梅内伊下令革命卫队平乱,伊朗在一夜间转危为安?

文雅笔墨
2026-01-11 14:18:46
台海还没开战,另一场恶仗已逼近中国,美撕下伪装,基辛格没说错

台海还没开战,另一场恶仗已逼近中国,美撕下伪装,基辛格没说错

霁寒飘雪
2026-01-10 16:12:58
善恶终有报!移居英国仅2年,57岁吴秀波再迎噩耗,步李易峰后尘

善恶终有报!移居英国仅2年,57岁吴秀波再迎噩耗,步李易峰后尘

阿雹娱乐
2025-12-20 11:08:48
吕鸣当选北京市门头沟区区长,曾任上海市虹口区区长

吕鸣当选北京市门头沟区区长,曾任上海市虹口区区长

起喜电影
2026-01-11 17:37:08
大舅蹭我车回家,400多公里只给20元,到家后母亲:这事怪你

大舅蹭我车回家,400多公里只给20元,到家后母亲:这事怪你

船长与船1
2026-01-11 11:00:49
A股罕见16连阳的逻辑是什么?下周投资者为何要注意“5控”?

A股罕见16连阳的逻辑是什么?下周投资者为何要注意“5控”?

李志林
2026-01-11 06:42:38
终于轮到日本“强烈抗议”:130年了,日本从未像今天这样憋屈

终于轮到日本“强烈抗议”:130年了,日本从未像今天这样憋屈

蜉蝣说
2026-01-11 17:52:40
痛心!致敬!辽宁13人因公牺牲

痛心!致敬!辽宁13人因公牺牲

本账号停运
2026-01-10 21:46:50
2026-01-11 18:39:00
君伟说
君伟说
分享职场故事
358文章数 48关注度
往期回顾 全部

科技要闻

“我们与美国的差距也许还在拉大”

头条要闻

特朗普就格陵兰岛下最后通牒 加拿大开始行动了

头条要闻

特朗普就格陵兰岛下最后通牒 加拿大开始行动了

体育要闻

詹皇晒照不满打手没哨 裁判报告最后两分钟无误判

娱乐要闻

留几手为闫学晶叫屈?称网友自卑敏感

财经要闻

外卖平台"烧钱抢存量市场"迎来终局?

汽车要闻

2026款宋Pro DM-i长续航补贴后9.98万起

态度原创

旅游
时尚
房产
游戏
本地

旅游要闻

威海:城市银装素裹 雪后美景引市民游客驻足

朱珠美上热搜的老钱风穿搭,太值得借鉴了!

房产要闻

66万方!4755套!三亚巨量房源正疯狂砸出!

《CS2》donk领奖时狂放发言!我只是把他们干爆

本地新闻

云游内蒙|“包”你再来?一座在硬核里酿出诗意的城

无障碍浏览 进入关怀版