成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

try catch 在實際開發場景中的五大用處,用起來!!!

開發 前端
昨天一位群友在面試的時候被問到了這么一個問題:多個請求同時發起時,如何保證失敗或者成功都返回,我第一啥時間就想到了?Promise.allSettled?來實現。

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心~

昨天一位群友在面試的時候被問到了這么一個問題:多個請求同時發起時,如何保證失敗或者成功都返回,我第一啥時間就想到了 Promise.allSettled 來實現

// 模擬多個異步操作:獲取用戶基本信息、訂單記錄、消息通知
const fetchUserInfo = () =>
  fetch('/api/user').then(res => res.json());

const fetchOrders = () =>
  fetch('/api/orders').then(res => {
    if (!res.ok) thrownewError('訂單獲取失敗')
    return res.json()
  });

const fetchNotifications = () =>
newPromise((_, reject) =>
    setTimeout(() => reject(newError('請求超時')), 3000)
  );

// 使用 Promise.allSettled 并行執行
Promise.allSettled([
  fetchUserInfo(),
  fetchOrders(),
  fetchNotifications()
])
.then(results => {
const [userResult, ordersResult, notifyResult] = results;

// 處理用戶信息
if (userResult.status === 'fulfilled') {
    console.log('用戶數據:', userResult.value);
    renderUserProfile(userResult.value);
  } else {
    console.error('用戶信息失敗:', userResult.reason);
    showPlaceholder('#user-section');
  }

// 處理訂單數據
if (ordersResult.status === 'fulfilled') {
    console.log('訂單數據:', ordersResult.value);
    renderOrderList(ordersResult.value);
  } else {
    console.error('訂單獲取失敗:', ordersResult.reason);
    showErrorToast('訂單加載異常');
  }

// 處理通知數據
if (notifyResult.status === 'fulfilled') {
    console.log('通知數據:', notifyResult.value);
    updateNotificationBadge(notifyResult.value);
  } else {
    console.warn('通知獲取失敗:', notifyResult.reason);
    disableNotificationBell();
  }
});

/* 輸出示例:
用戶數據: {id: 1, name: "張三"}
訂單數據: [ {...}, {...} ]
通知獲取失敗: Error: 請求超時
*/

但是他說了:面試官說除了 Promise.allSettled 實現,還有什么其他辦法嗎? 于是我又想到了使用 try catch + Promise.all:

// 模擬多個異步操作:獲取用戶基本信息、訂單記錄、消息通知
const fetchUserInfo = async () => {
    try {
        const res = await fetch('/api/user')
        return res.json()
    } catch {
        returnnull
    }
}

const fetchOrders = async () => {
    try {
        const res = await fetch('/api/orders')
        if (!res.ok) thrownewError('訂單獲取失敗')
        return res.json()
    } catch {
        returnnull
    }
}

const fetchNotifications = async () => {
    try {
        awaitnewPromise((_, reject) =>
            setTimeout(() => reject(newError('請求超時')), 3000)
        )
    } catch {
        returnnull
    }
}

// 使用 Promise.all
Promise.all([
    fetchUserInfo(),
    fetchOrders(),
    fetchNotifications()
]).then(res => {
    console.log(res)
    // [
    //     {id: 1, name: "張三"},
    //     [ {...}, {...} ],
    //     null
    // ]
})

接著這位群友問我能不能出一篇 try catch 在實際開發中的使用場景,我想想其實可以講講

try catch 場景

1、異步請求的優雅處理

典型場景: 處理 AJAX/Fetch 請求時網絡錯誤、接口異常

async function fetchUserData() {
try {
    const response = await fetch('/api/user');
    if (!response.ok) thrownewError('HTTP Error');
    const data = await response.json();
    // 正常處理邏輯
  } catch (error) {
    console.error('請求失敗:', error);
    showToast('數據加載失敗,請檢查網絡');
    // 降級處理:顯示緩存數據/缺省頁面
  }
}

2、JSON 解析的安全防護

常見問題: JSON.parse() 遇到非法格式時導致整個應用崩潰

function safeParse(jsonString) {
  try {
    return JSON.parse(jsonString);
  } catch (e) {
    console.warn('JSON 解析失敗,返回默認值');
    return {}; // 或執行其他恢復邏輯
  }
}

// 使用案例
const userPrefs = safeParse(localStorage.getItem('preferences'));

3、第三方庫的錯誤隔離

痛點場景: 不確定穩定性的插件/工具庫可能拋出意外錯誤

function safePluginInit() {
  try {
    ThirdPartyPlugin.init({
      // 復雜配置項
    });
  } catch (e) {
    captureErrorToSentry(e); // 上報錯誤
    loadFallbackPlugin(); // 降級方案
  }
}

4、表單驗證的靈活應用

function validateForm(formData) {
try {
    if (!formData.email.includes('@')) {
      thrownew ValidationError('郵箱格式錯誤');
    }
    if (formData.password.length < 8) {
      thrownew ValidationError('密碼至少8位');
    }
  } catch (e) {
    if (e instanceof ValidationError) {
      highlightErrorField(e.message);
      returnfalse;
    }
    // 其他未知錯誤繼續拋出
    throw e;
  }
}

5、瀏覽器特性檢測的優雅降級

兼容性處理: 替代傳統的特性檢測寫法

function checkWebGLSupport() {
try {
    const canvas = document.createElement('canvas');
    return !!window.WebGLRenderingContext && 
      (canvas.getContext('webgl') || canvas.getContext('experimental-webgl'));
  } catch (e) {
    returnfalse;
  }
}

if (!checkWebGLSupport()) {
  showCompatibilityWarning();
  load2DFallback();
}
責任編輯:武曉燕 來源: 前端之神
相關推薦

2009-12-01 08:54:30

Linux發行版

2022-03-24 08:57:30

Linux BashShell代碼

2019-02-21 05:51:44

物聯網用途IOT

2025-01-20 09:00:00

架構開發代碼

2009-03-15 10:01:54

Firefox瀏覽器分頁

2020-10-14 10:58:48

JavaScript工具Gitee

2017-06-14 19:05:51

機器學習Quora應用場景

2019-06-04 10:40:07

2010-03-16 14:50:49

Python web框

2021-09-08 17:17:43

大數據智慧城市大數據應用

2009-03-05 09:21:04

敏捷開發XP開源

2022-02-14 08:00:00

開發CI/CD自動化

2010-03-10 15:54:33

Python讀寫文件

2023-11-27 15:27:21

2018-10-26 08:59:17

Linux開發工具

2021-06-30 09:20:18

NuShell工具Linux

2021-09-26 05:38:16

云計算云計算環境云應用

2023-11-28 11:29:02

人工智能醫療保健

2013-05-07 09:24:53

BYOD
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av网站在线看| 美女131mm久久爽爽免费 | 免费视频一区 | 欧美freesex黑人又粗又大 | 一区网站| 国产精品久久久久久久久久免费看 | 午夜免费福利影院 | 欧美操操操 | 欧美激情久久久 | 精品一区二区三区在线观看国产 | 成人免费在线播放 | 9porny九色视频自拍 | 久免费视频 | 国产黄色一级电影 | 四虎影音 | 日韩视频免费 | 91视频精选 | 九九热在线视频观看这里只有精品 | 久久久久久久久久一区 | 成人伊人| 国产精品久久久久久久久久三级 | 超碰97av| 色偷偷噜噜噜亚洲男人 | 亚洲高清av在线 | 精品久久亚洲 | 成人精品一区二区三区中文字幕 | 亚洲一区二区av | 免费观看黄色一级片 | 成人在线免费视频 | 国产精品久久久久久一区二区三区 | 国产精品永久免费观看 | 午夜精品视频一区 | 99精品国自产在线 | 欧美性久久 | 中文二区| 欧美一二三 | 免费a在线 | 亚洲91精品 | 涩涩视频在线观看免费 | 超碰在线观看97 | 一级大黄 |