91精品新拍在线观看,91精品一区二区,91精品一区二区三区久久久久,91精品在线播放,91精品中综合久久久久婷婷

<pre id="fhfjj"><ruby id="fhfjj"><var id="fhfjj"></var></ruby></pre>
    <p id="fhfjj"><del id="fhfjj"></del></p>

    <p id="fhfjj"><mark id="fhfjj"><progress id="fhfjj"></progress></mark></p>

      當前位置: 首頁 / 技術分享 / 正文
      async和await語法的缺點

      2023-03-29

      await 失敗

      async和await語法的缺點

        ●async / await

        上述我們已經把 promise 的基礎使用掌握了, 但是個人認為, promise 的鏈式調用仍然會有點小問題

        就是在使用的時候, 過多的鏈式調用, 對于閱讀體驗來說, 仍然是有一點小問題, 不利于閱讀

        所以我們可以 使用 ES6+ 新推出的 async與await, 使用我的異步代碼書寫的更像是同步代碼一樣

        ●注意: 需要配合的必須是 Promise

        ●async 關鍵字的用法:

        ○直接書寫在函數的前面即可, 表示該函數是一個異步函數

        ○意義: 表示在該函數內部可以使用 await 關鍵字

        ●await 關鍵字的用法:

        ○必須書寫在一個有 async 關鍵字的函數內

        ○await 后面等待的內容必須是一個 promise 對象

        ○本該使用 then 接受的結果, 可以直接定義變量接受了

        ●常規的 promise 調用方式

        fn()

        .then(function (res) {

        console.log(res);

        })

        .catch(function (res) {

        console.log(res);

        });

        ●利用 async 和 await 關鍵字來使用

        async function newFn() {

        /**

        * await 是等待的意思

        *

        * 在當前 fn 函數內, await 必須要等到后面的 Promise 結束以后, 才會繼續執行后續代碼

        */

        const r1 = await fn();

        console.log("第一次: ", r1);

        const r2 = await fn();

        console.log("第二次: ", r1);

        const r3 = await fn();

        console.log("第三次: ", r1);

        }

        newFn();

        ●async 和 await 語法的缺點

        ○await 只能捕獲到 Promise 成功的狀態

        ○如果失敗, 會報錯并且終止程序的繼續執行

        async function newFu() {

        const r1 = await fn();

        console.log("失敗后, 提示用戶網絡錯誤"); // 如果失敗的話這行代碼并不會執行

        }

        newFu();

        ● 解決方法1: 使用 try...catch...

        ○語法: try { 執行代碼 } catch (err) { 執行的代碼 }

        ○首先執行 try 內部的代碼, 如果不報錯, catch 的代碼不執行了

        ○如果報錯, 不會爆出錯誤, 不會終止程序, 而是執行 catch 的代碼, 報錯信息在 catch 函數的形參內

        async function newFu() {

        try {

        const r1 = await fn();

        console.log(r1);

        } catch (error) {

        console.log("網絡錯誤, 請檢查網絡并重新請求");

        }

        }

        newFu();

        ●解決方法2: 改變封裝的思路

        ○原因: 因為 promise 對象有成功和失敗的狀態, 所以會在失敗狀態是報錯

        ○解決: 封裝一個 百分比成功的 promise 對象, 讓成功和失敗的時候都按照 resolve 的形式來執行

        ○只不過傳遞出去的參數, 記錄一個表示成功或者失敗的信息

        function fn() {

        const p = new Promise(function (resolve, reject) {

        const timer = Math.ceil(Math.random() * 3000) + 2000;

        setTimeout(() => {

        if (timer > 3500) {

        resolve({ code: 0, msg: "班長買水失敗" });

        } else {

        resolve({ code: 1, msg: "班長買水成功" });

        }

        }, timer);

        });

        return p;

        }

        async function newFn() {

        const r1 = await fn();

        if (r1.code === 0) {

        console.log("第一次請求失敗, 請檢查您的網絡信息");

        } else {

        console.log("第一次請求成功", r1.msg);

        }

        const r2 = await fn();

        if (r2.code == 0) {

        console.log("第二次請求失敗, 請檢查您的網絡信息");

        } else {

        console.log("第二次請求成功", r2.msg);

        }

        }

        newFn();

      好程序員公眾號

      • · 剖析行業發展趨勢
      • · 匯聚企業項目源碼

      好程序員開班動態

      More+
      • HTML5大前端 <高端班>

        開班時間:2021-04-12(深圳)

        開班盛況

        開班時間:2021-05-17(北京)

        開班盛況
      • 大數據+人工智能 <高端班>

        開班時間:2021-03-22(杭州)

        開班盛況

        開班時間:2021-04-26(北京)

        開班盛況
      • JavaEE分布式開發 <高端班>

        開班時間:2021-05-10(北京)

        開班盛況

        開班時間:2021-02-22(北京)

        開班盛況
      • Python人工智能+數據分析 <高端班>

        開班時間:2021-07-12(北京)

        預約報名

        開班時間:2020-09-21(上海)

        開班盛況
      • 云計算開發 <高端班>

        開班時間:2021-07-12(北京)

        預約報名

        開班時間:2019-07-22(北京)

        開班盛況
      IT培訓IT培訓
      在線咨詢
      IT培訓IT培訓
      試聽
      IT培訓IT培訓
      入學教程
      IT培訓IT培訓
      立即報名
      IT培訓

      Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

      91精品新拍在线观看,91精品一区二区,91精品一区二区三区久久久久,91精品在线播放,91精品中综合久久久久婷婷