国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

try...catch 抓不到 Promise 的錯誤?原來是這么回事

開發
在 JavaScript 中,try...catch 是我們處理錯誤的得力助手。但當你開始和 Promise 打交道時,可能會遇到一個讓你困惑的場景。

在 JavaScript 中,try...catch 是我們處理錯誤的得力助手。我們很自然地認為,只要把可能出錯的代碼放進 try 塊,catch 就一定能捕獲到異常。但當你開始和 Promise 打交道時,可能會遇到一個讓你困惑的場景:

try {
 // 假設這是一個會失敗的 API 請求
 fetch('https://non-existent-url.com/api'); 
 console.log('請求已發送');
} catch (error) {
 // 這里的 catch 會執行嗎?
 console.log('抓到錯誤了!', error);
}

// 控制臺輸出:
// 請求已發送
// Uncaught (in promise) TypeError: Failed to fetch

咦?catch 塊根本沒有執行!錯誤信息直接在控制臺炸開了,帶著一個扎眼的 Uncaught (in promise)。

這究竟是為什么?難道 try...catch 對 Promise 無效嗎?

別急,這并非 try...catch 的 bug,而是我們對 同步 與 異步 的理解出了偏差。

核心原因:try...catch 是同步的,而 Promise 是異步的

讓我們用一個更簡單的比喻來理解:

你點了一份外賣(發起一個 Promise 請求)。try...catch 就像你家門口的保安。

  • 你下單的動作是瞬間完成的。你按下“支付”按鈕,App 立刻告訴你“下單成功,騎手正在路上”。這個“下單成功”的反饋是 同步 的。
  • 保安 try...catch 只在你下單的那個瞬間盯著你。他看到你成功下了單,沒出任何問題(比如網絡斷了、余額不足等),于是他就下班了。
  • 半小時后,騎手送餐路上翻車了(Promise 狀態變為 rejected)。這個錯誤發生在未來,發生在保安下班之后。保安自然是抓不到這個“錯誤”的。

回到代碼中:

  • try { ... } 塊里的代碼是 同步執行 的。
  • fetch(...) 這個函數被調用時,它 立即返回 一個 Promise 對象。在 try 塊看來,這個返回動作是成功的,沒有任何錯誤被“拋出”(throw)。
  • 所以,try 塊順利執行完畢,catch 自然不會被觸發。
  • 真正的網絡錯誤發生在稍后的某個時間點,當這個錯誤發生時,它改變了那個已經返回的 Promise 對象的狀態,將其置為 rejected。這個錯誤屬于 異步世界,而同步的 try...catch早已執行完畢,鞭長莫及。

正確的姿勢:使用 async/await

那么,如何讓保安(try...catch)等到外賣送到(或出事)再下班呢?答案就是使用 async/await。

await 關鍵字有一個神奇的魔力:它會“暫停”當前 async 函數的執行,直到它等待的 Promise 有了結果(無論是成功 resolved 還是失敗 rejected)。

如果 Promise 失敗了,await 會像一個“信使”,把這個異步的錯誤“解包”并 重新在當前同步上下文中拋出。這樣一來,try...catch 就能穩穩地接住它了。

讓我們來改造一下代碼:

看,這次 catch 完美地捕獲了錯誤!

async/await 的工作流程:

  • 函數用 async 標記,表示這是一個異步函數。
  • await 守在 fetch(...) 前面,函數執行到這里就“暫停”了,但不會阻塞整個程序。
  • 它耐心等待 fetch 返回的 Promise 結果。
  • 當 Promise 因為網絡問題而 rejected 時,await 將這個 rejection 的原因(也就是那個 error 對象)作為一個同步錯誤 throw 出來。
  • 這個被 throw 出來的錯誤,正好在 try 塊的作用域內,于是被 catch 成功捕獲。

別忘了還有 .catch() 方法

當然,處理 Promise 錯誤并非只有 async/await 這一條路。在 async/await 出現之前,我們一直使用 Promise 自帶的 .catch() 方法鏈式調用來處理錯誤,這同樣非常有效。

fetch('https://non-existent-url.com/api')
  .then(response => {
    if (!response.ok) {
      // 手動拋出一個錯誤,讓下面的 .catch() 捕獲
      throw new Error('網絡響應不佳');
    }
    return response.json();
  })
  .then(data => {
    console.log('請求成功:', data);
  })
  .catch(error => {
    // 任何在 .then() 鏈中發生的錯誤都會在這里被捕獲
    console.log('在 .catch() 方法中抓到錯誤了!', error);
  });

這種方式的優點是代碼結構清晰,形成了一條“成功路徑” (.then) 和一條“失敗路徑” (.catch)。

責任編輯:趙寧寧 來源: JavaScript
相關推薦

2020-06-30 08:12:32

VMwareKVMDocker

2022-08-15 08:01:00

三色標記JVM算法

2021-07-29 16:56:59

微信騰訊注冊

2025-04-03 10:39:56

2022-10-21 08:17:13

MongoDB查詢Document

2018-06-04 08:40:20

磁盤分區MBR

2025-12-01 01:33:00

2021-02-07 08:13:18

@DateTimeFo@NumberFormSpring

2020-03-04 08:47:10

Kafka架構原理

2020-11-12 07:32:53

JavaScript

2020-02-23 15:55:00

疫情AI人工智能

2022-01-14 14:19:38

ReactTS前端

2012-01-11 09:15:45

Objective-C

2025-06-25 08:15:00

JavaScrip異步編程代碼

2020-09-27 07:48:40

不用try catch

2024-10-11 11:59:03

2017-06-06 15:13:07

2022-12-14 07:32:40

InnoDBMySQL引擎

2023-09-07 07:53:21

JavaScriptGoRust

2023-04-09 23:25:30

Java注解元注解
點贊
收藏

51CTO技術棧公眾號

欧美精品久久久久久久久老牛影院| av亚洲一区| av网页在线| 国产成人视屏| 日韩理论片在线| 免费欧美一级视频| 97人人精品| 国产91对白在线播放| 欧美va天堂| 国产在线观看精品一区二区三区| 欧美韩国日本在线观看| 麻豆久久久9性大片| 国产黄色大片在线观看| 欧美大片第1页| 亚洲色图图片网| 99re视频精品| 操bbb操bbb| 成人福利在线看| 亚洲最大免费| 国产电影精品久久禁18| 日韩av电影免费观看| 影音先锋亚洲精品| 粉嫩av一区二区三区免费观看| 亚洲精品天堂| 欧美精品一区男女天堂| 在线观看中文字幕| 国产精品一区二区三区乱码| 永久免费网站视频在线观看| 国产日韩欧美一区在线| 91精品中文在线| 美女网站久久| 成人短视频在线观看免费| 亚洲午夜免费| 亚洲欧美日韩第一区| 无码少妇一区二区三区芒果| 成人综合激情网| 91国视频在线| 不卡的av网站| 欧美激情久久久久| 天天夜夜亚洲| 欧美性xxxx在线播放| aaa在线免费观看| 亚洲欧美视频在线观看视频| av日韩中文字幕| 免费欧美日韩| 91大学生片黄在线观看| 国精产品一区一区三区mba桃花| 99re视频| 九色porny丨国产精品| 国产免费人做人爱午夜视频| 亚洲午夜免费视频| 精品黄色免费中文电影在线播放| 一本大道久久a久久综合婷婷| 在线观看免费观看在线91| 亚洲一级二级在线| 春暖花开成人亚洲区| 亚洲精品456在线播放狼人| 美女91在线看| 亚洲欧美综合区自拍另类| 三妻四妾的电影电视剧在线观看| 国产亚洲综合久久| 国产成人精品免费视| 成人欧美一区二区三区黑人| 亚洲国产老妈| 欧美一区二区三区四区在线观看地址| 久久成人免费电影| 亚洲这里只有精品| 欧美日韩精品欧美日韩精品一| 蜜桃视频www网站在线观看| 最新的欧美黄色| 亚洲国产片色| 毛片.com| 色噜噜亚洲精品中文字幕| 成人高清电影网站| 高清无码视频直接看| 亚洲成人你懂的| 成人四虎影院| 午夜午夜精品一区二区三区文| 国产情人综合久久777777| 黄色在线视频网站| 欧美精品在线极品| 成人综合婷婷国产精品久久| 伦理在线一区| 国产区日韩欧美| 精品入口麻豆88视频| 日韩欧美一区二区三区四区五区| 亚洲一区在线观看网站| 伊人久久大香线蕉av超碰| 最新精品视频| 91精品欧美久久久久久动漫| 波多野结衣在线播放一区| 成人在线免费播放视频| 日韩一区二区欧美| 肉丝袜脚交视频一区二区| 亚洲精品蜜桃久久久久久| 色女孩综合影院| 亚洲网站在线| 久热av在线| 精品一区二区三区日本| 3d动漫精品啪啪1区2区免费| 电影一区二区在线观看| 丰满少妇又爽又紧又丰满69| 欧日韩不卡在线视频| 亚洲欧美激情插 | 男女啪啪免费观看| 亚洲国产日韩欧美在线图片 | 五月天久久777| 黄色的视频在线免费观看| 欧美激情视频免费观看| 亚洲免费观看在线观看| 日韩有码av| 97影视大全免费追剧大全在线观看| 日本aⅴ大伊香蕉精品视频| 1000部国产精品成人观看| 自拍日韩欧美| 国产一区 二区| 天天草夜夜草| 国产精品嫩草影院久久久| 久久嫩草精品久久久精品| 99久久er| 在线看的黄色网址| 久久久久久久久久国产| 老鸭窝一区二区久久精品| 九九九九免费视频| 91国产视频在线播放| 成人毛片在线观看| 亚洲影视一区二区三区| 四虎精品永久免费| 黑人另类精品××××性爽| 新的色悠悠久久久| 天堂色在线视频| 美女三级99| 久久免费精品视频| 久久午夜羞羞影院免费观看| 黄色网址在线免费观看| 成人国产精品av| 91亚洲国产成人精品一区二三| 蜜臀一区二区三区| 国内一区二区三区在线视频| 亚洲乱码精品一二三四区日韩在线| 免费在线观看av电影| 亚洲精品中文综合第一页| 日韩激情视频在线| 久久九九影视网| 麻豆精品新av中文字幕| 欧美xxx性| 国产综合av在线| 国产亚洲日本欧美韩国| 蜜臀久久久久久久| 成人全视频在线观看在线播放高清| 69久久久久久| 国产成人自拍视频在线观看| 日韩国产高清视频在线| 久久se精品一区二区| 国产一区二区三区亚洲综合| 一二三区高清| 欧美在线激情| 一本大道久久a久久精二百| 欧美日韩一二三四| 国产女主播在线直播| 91色中文字幕| 亚洲国产另类久久精品| 欧美国产丝袜视频| 欧美性猛交视频| 久久九九全国免费精品观看| 国产精品女人网站| av不卡在线免费观看| 天天看片激情网站| 成人美女大片| 电影天堂久久| 日本五码在线| 天堂а√在线最新版中文在线| 天堂精品久久久久| 电影一区二区在线观看| 中文在线8资源库| 中文字幕国内自拍| 91在线观看免费网站| 啊v视频在线一区二区三区 | free亚洲| 国产精品一 二 三| 成人精品在线视频| 国产91成人在在线播放| 久中文字幕一区| 亚洲一级片网站| 僵尸再翻生在线观看| 精品美女久久久| 国产精品99久久久| 欧美一区二区在线免费播放| 日韩美女免费视频| 日本xxxxxxx免费视频| 波多野结依一区| 91中文字幕精品永久在线| 久久视频一区二区| 国产亚洲精品美女久久久| 国内精品视频免费| 新版中文字幕在线资源| 欧美精品尤物在线观看| 国产丝袜欧美中文另类| 久久视频在线看| 97国产在线|