Javascript | 分別用async await非同步方法和Promise來實現一個簡易的求職程式

来源:https://www.cnblogs.com/yehaida/archive/2022/12/16/16988381.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 介紹 可曾想過我們每次創建新項目,或者換地方寫程式,都要把之前寫過的工具類找出來又要複製粘貼一遍有些麻煩,尤其是寫uni-app自定義模板主要還是開發工具完成的。這時為什麼不自己做一款自己的uni-app工具箱,每次用直接從商城導入就行了 ...


  0 關註公眾號,一起交流,微信搜一搜: LiOnTalKING
 

JavaScript Promise

Promise 是一個 ECMAScript 6 提供的類,目的是更加優雅地書寫複雜的非同步任務。 如何創建一個 Promise 對象?
new Promise(function (resolve, reject) {
    // 要做的事情...
});
Promise 的使用:
new Promise(function (resolve, reject) {
    console.log(1111);
    resolve(2222);
}).then(function (value) {
    console.log(value);
    return 3333;
}).then(function (value) {
    console.log(value);
    throw "An error";
}).catch(function (err) {
    console.log(err);
});
執行結果:
1111
2222
3333
An error
 

JavaScript async/await非同步方法

  1. async 是“非同步”的簡寫,async 用於申明一個 function 是非同步的,而 await 用於等待一個非同步方法執行完成,await 只能出現在 async 函數中。
  2. async 表示這是一個async函數, await只能用在async函數裡面,不能單獨使用
  3. async 返回的是一個Promise對象,await就是等待這個promise的返回結果後,再繼續執行
  4. await 等待的是一個Promise對象,後面必須跟一個Promise對象,但是不必寫then(),直接就可以得到返回值
求職面試 今天要實現的求職面試的程式,總共包含3次面試,上一次面試通過才能進入到下一次面試,3次面試都通過了就算是求職成功了,分別用Promise和async/await兩種方式實現對比。 面試方法如下:
//面試
    function interview(round) {
        return new Promise((resole, reject) => {
            setTimeout(() => {
                var score = Math.random();
                if (score > 0.6) {
                    resole(score);
                } else {
                    var err = new Error(`分數:${score}`);
                    err.round = round;
                    reject(err)
                }
            }, 1000);
        });
    };
  該方法的參數round為第幾輪面試,方法返回一個promise,獲取一個隨機數,隨機數就是面試的得分,超過0.6即為通過面試,否則為不通過。  

通過非同步方法來實現求職過程:

//非同步方法求職
    async function seekJobs() {
        console.log('seekJobs => start');
        console.time('seekJobs');
        try {
            console.log('第 1 輪面試得分:', await interview(1));
            console.log('第 2 輪面試得分:', await interview(2));
            console.log('第 3 輪面試得分:', await interview(3));
            console.log('yeah!');
        } catch (error) {
            console.error('第 ' + error.round + ' 輪面試沒通過:', error);
        }
        console.log('seekJobs => end.');
        console.timeEnd('seekJobs');
        return '求職已經結束。';
    };

通過async聲明該方法為非同步方法,每一輪面試用await等待返回面試結果,通過可進入下一輪面試,不通過則記錄是第幾輪面試和得分,最後方法返回信息“求職已經結束。”

通過Promise方式來實現求職過程:

//promise的方式求職
    function seekJobs_P() {
        console.log('seekJobs => start');
        console.time('seekJobs');
        interview(1)
            .then((score) => {
                console.log('第 1 輪面試得分:', score);
                return interview(2);
            })
            .then((score) => {
                console.log('第 2 輪面試得分:', score);
                return interview(3);
            })
            .then((score) => {
                console.log('第 3 輪面試得分:', score);
                console.log('yeah!');
            })
            .catch((error) => {
                console.error('第 ' + error.round + ' 輪面試沒通過:', error);
            });
        console.log('seekJobs => end.');
        console.timeEnd('seekJobs');
        return '求職已經結束。';
    };

每一輪面試的通過都會進入到then,列印分數並調用下一輪面試,直到所有面試都通過,中間過程中有一輪面試沒通過則進入到catch,最後同樣返回信息“求職已經結束“

最後寫主程式main方法

/**
     * 主線程
     */
    (function main() {
        console.log('main.start======================================');
        console.time('main');

        //調用求職的非同步方法,遇到await不等待,直接返回到mian方法繼續執行,main執行完才輸出求職返回結果
        // seekJobs().then((res) => {
        //     console.log('求職返回:', res);
        // });

        //調用promise的方式求職,遇到then繼續執行並返回"求職已經結束。",回到main方法輸出求職返回結果,最後再輸出每一次面試的分數
        var res = seekJobs_P();
        console.log('求職返回:', res);

        console.log('main.end======================================');
        console.timeEnd('main');
    })();

 

主程式這裡可以分別調用seekJobs和seekJobs_P兩種方式的求職。 1、非同步方法在遇到await就直接 返回到main方法,main方法繼續往下執行,非同步方法由另外的線程取執行,執行結束再回調。 2、promise方法則是在遇到then繼續執行並返回"求職已經結束。",回到main方法輸出求職返回結果,最後再輸出每一次面試的分數。  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 個人名片: 對人間的熱愛與歌頌,可抵歲月冗長:sun_with_face: Github👨🏻‍💻:念舒_C.ying CSDN主頁✏️:念舒_C.ying 個人博客:earth_asia: :念舒_C.ying Web伺服器也稱為WWW(World Wide Web)伺服器,主要功能是提供網頁 ...
  • 個人名片: 對人間的熱愛與歌頌,可抵歲月冗長:sun_with_face: Github👨🏻‍💻:念舒_C.ying CSDN主頁✏️:念舒_C.ying 個人博客:earth_asia: :念舒_C.ying 1 配置環境 掛載系統ISO,並配置好本地dnf源。(前面的文章講過,這裡就略過. ...
  • TencentOS Tiny AIoT 應用創新大賽是騰訊 TencentOS 團隊聯合恩智浦半導體、安謀科技(Arm China)發起的線上開發者活動,主要面向中小企業嵌入式工程師、廣大嵌入式開發者、物聯網愛好者、創客團隊等,號召廣大開發者能參與到國內開源項目中,通過開源協同,基於 Tencent ...
  • 摘要:openGemini是華為雲面向物聯網和運維監控場景開源的一款雲原生分散式時序資料庫,相容InfluxDB API,具有高性能、高併發、高擴展等特點。 openGemini是華為雲面向物聯網和運維監控場景開源的一款雲原生分散式時序資料庫,相容InfluxDB API,具有高性能、高併發、高擴展 ...
  • Kerberos,在古希臘神話故事中,指的是一隻三頭犬守護在地獄之門外,禁止任何人類闖入地獄之中。 那麼在現實中,Kerberos指的是什麼呢? 一、Kerberos介紹 01 Kerberos是什麼 根據百度詞條釋義,Kerberos是一種電腦網路授權協議,用來在非安全網路中,對個人通信以安全的 ...
  • 近日,華為分析服務6.9.0版本發佈,正式上線探索能力。開發者可自由定義與配置分析模型,支持報告實時預覽,數據洞察體驗更加靈活與便捷。 新上線的探索能力中,有漏斗分析、事件歸因、會話路徑分析三個高級分析模型。在原有能力的基礎上,時效性進一步增強,開發者在完成配置與報告創建後,即能查看具體內容。通過低 ...
  • 隨著新一代信息技術與汽車產業的深度融合,智能網聯汽車正逐漸成為汽車產業發展的戰略制高點,無論是傳統車企還是新勢力都瞄準了“智能座艙”這種新一代人機交互方式。面對競爭如此激烈的車機市場,華為鴻蒙車機系統的出現,給消費者帶來了不同凡響的便捷使用感受,這得益於華為在硬體、軟體和場景優化上的技術優勢,用戶只 ...
  • 好家伙,本篇為《JS高級程式設計》第六章“集合引用類型”學習筆記 1.數組的複製和填充 批量複製方法 copyWithin(),以及填充數組方法fill()。 這兩個方法的函數簽名類似,都需要指定既有數組實例上的一個範圍,包含開始索引,不包含結束索引。 使用這個方法不會改變數組的大小。 1.1.fi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...