」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 了解非同步 JavaScript

了解非同步 JavaScript

發佈於2024-11-07
瀏覽:854

Understanding Async JavaScript

JavaScript 是一種單執行緒語言,這意味著它一次只能做一件事。然而,Web 應用程式通常需要執行從伺服器取得資料等任務,這可能需要一些時間。如果 JavaScript 必須等待每個任務完成才能繼續,那麼您的 Web 應用程式將會變得緩慢且無回應。這就是非同步(async)JavaScript發揮作用的地方。

什麼是異步 JavaScript?

非同步 JavaScript 允許您的程式碼啟動一個任務,然後在等待該任務完成時繼續執行其他任務。任務完成後,您的程式碼可以返回並處理結果。這有助於保持您的應用程式快速且響應迅速。

非同步 JavaScript 中的關鍵概念

  1. 同步與非同步

    • 同步:每個任務都會等待前一個任務完成後再開始。例如:
     console.log("Start");
     let result = someFunction(); // This might take a while
     console.log("End");
    

    在同步程式碼中,只有在 someFunction() 完成後才會記錄「End」訊息,這可能會減慢速度。

  • 非同步:任務可以獨立啟動和完成,因此您的程式碼不會陷入等待。例如:

     console.log("Start");
     setTimeout(() => {
         console.log("End");
     }, 2000);
    

    這裡,「結束」訊息將在 2 秒後記錄,但同時,您的程式碼可以繼續執行其他操作。

  1. 回呼:

    • A 回呼是一個作為參數傳遞給另一個函數的函數,該函數將在任務完成後執行。
    • 例子:
     function fetchData(callback) {
         setTimeout(() => {
             let data = "Some data";
             callback(data);
         }, 2000);
     }
    
     fetchData((data) => {
         console.log(data); // This will log "Some data" after 2 seconds
     });
    
  • 回調是處理非同步任務的原始方法,但它們可能會變得複雜,特別是當您有許多任務需要管理時(這稱為“回調地獄”)。
  1. 承諾

    • A promise 是一個對象,表示非同步任務的最終完成(或失敗)及其結果值。
    • 例子:
     let promise = new Promise((resolve, reject) => {
         let success = true;
         if (success) {
             resolve("Task completed successfully!");
         } else {
             reject("Task failed!");
         }
     });
    
     promise.then((message) => {
         console.log(message);
     }).catch((error) => {
         console.log(error);
     });
    
  • resolve:如果任務成功完成,則承諾將被「解決」並帶有一個值。
  • reject:如果任務失敗,則 Promise 被「拒絕」並顯示錯誤訊息。
  • .then():處理 Promise 解決後傳回的值。
  • .catch():如果 Promise 被拒絕,則處理錯誤。
  1. 非同步/等待:

    • asyncawait 是現代 JavaScript 功能,讓使用 Promise 變得更容易、更具可讀性。
    • async:使用 async 宣告的函數將始終傳回一個 Promise。
    • await:暫停非同步函數的執行,直到承諾得到解決。
    • 例子:
     async function fetchData() {
         try {
             let data = await someAsyncTask();
             console.log(data);
         } catch (error) {
             console.error("Error:", error);
         }
     }
    
  • 在此範例中,await 關鍵字用於等待 someAsyncTask 完成,然後再繼續執行下一行程式碼。如果任務失敗,則會在 catch 區塊中擷取並處理錯誤。

概括

  • 非同步 JavaScript 透過讓您的程式碼同時處理多個任務,幫助防止您的應用程式變得緩慢且無回應。
  • 回呼是在非同步任務完成後運行的函數,但對於複雜的任務可能會變得混亂。
  • Promises 提供了一種更簡潔的方式來處理非同步操作,代表將來將完成的任務。
  • Async/Await 是一種現代語法,使使用 Promise 變得更簡單、更具可讀性。

了解非同步 JavaScript 對於建立響應迅速、高效的 Web 應用程式至關重要,因為它允許您的程式碼執行任務,而不會陷入等待緩慢操作完成的困境。

版本聲明 本文轉載於:https://dev.to/vincod/understanding-async-javascript-2l74?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何解決 Alpine 容器 Go 中 Pingdom API 的 x509 憑證問題?
    如何解決 Alpine 容器 Go 中 Pingdom API 的 x509 憑證問題?
    x509 Go 中Pingdom API 的憑證問題在利用pingdom-go 套件與Pingdom API 互動時,容器化應用程式遇到以下問題錯誤:「取得https://api.pingdom.com/api/2.1/checks/0:x509:由未知頒發機構簽署的憑證。 要解決此問題,我們可以探...
    程式設計 發佈於2024-11-07
  • 前端 UI 元件
    前端 UI 元件
    iHateReading 自訂儲存庫 在過去的一個月裡,我製作了許多 UI 元件,這些元件是真實世界的 Web 元件,例如按鈕、輸入、表單、橫幅、圖庫 為多種目的而製造的組件 學習前端並在我所做的事情上變得更好 提高前端開發中編寫更好程式碼的能力(稍後我會解釋這意味著什麼) 我目前...
    程式設計 發佈於2024-11-07
  • 我可以僅使用 .frm 檔案還原 MySQL 資料庫嗎?
    我可以僅使用 .frm 檔案還原 MySQL 資料庫嗎?
    使用 .frm 檔案還原 MySQL 資料庫執行常規資料庫備份時,擷取整個資料庫結構和資料至關重要。數據。但是,在某些情況下,使用者可能只能存取 .frm 文件,該文件代表表結構,而不是實際資料。在這種情況下,僅使用 .frm 檔案還原資料庫及其資料可能具有挑戰性。 幸運的是,在某些情況下可以從 ....
    程式設計 發佈於2024-11-07
  • 在 PHP 中啟用或停用「allow_url_fopen」:評估風險和替代方案
    在 PHP 中啟用或停用「allow_url_fopen」:評估風險和替代方案
    授予或不授予:探索PHP 中'allow_url_fopen' 的用法開發者經常請求激活'allow_url_fopen' 功能在生產伺服器上。鑑於目前的網頁開發狀況,確定此權限是否仍然是必要的或是否有更好的替代方案至關重要。 評估情況在做出決定之前,請考慮以下事項:...
    程式設計 發佈於2024-11-07
  • 如何覆蓋 PHP 的 `mail()` 函數中的信封回傳地址?
    如何覆蓋 PHP 的 `mail()` 函數中的信封回傳地址?
    如何在PHP Mail 中覆蓋信封回傳地址為了解決使用PHP 的mail() 函數設定信封回傳地址的問題,這個答案提供了一個簡單的解決方案。 mail() 函數接受可選的第四個和第五個參數。雖然第四個參數用於設定標頭,但第五個參數可用於將選項直接傳遞給底層的 sendmail 命令。透過在第五個參數...
    程式設計 發佈於2024-11-07
  • 科技觀察 #1
    科技觀察 #1
    大家好,這是我上週的技術手錶,其中包含很多 #react、一點 #html、一些 #css 和 #npm。 ? https://www.totaltypescript.com/how-to-create-an-npm-package 如何建立 NPM 套件 建立、測試和發布 NPM 套件(從初始化...
    程式設計 發佈於2024-11-07
  • mysqli_fetch_array() 何時顯示錯誤「期望參數 1 為 mysqli_result,給定布林值」?
    mysqli_fetch_array() 何時顯示錯誤「期望參數 1 為 mysqli_result,給定布林值」?
    mysqli_fetch_array() 期望MySQLi 結果,而不是布林值在給定的PHP 程式碼中,錯誤「mysqli_fetch_array() 期望參數1 為mysqli_result, boolean Give" 表示使用mysqli_query() 的查詢執行失敗,傳回fals...
    程式設計 發佈於2024-11-07
  • 子集和問題的 PHP 程式
    子集和問題的 PHP 程式
    子集和問題是電腦科學和動態規劃中的經典問題。給定一組正整數和一個目標和,任務是確定是否存在給定集合的子集,其元素總和等於目標和。 子集與問題的PHP程序 使用遞歸解決方案 例子 <?php // A recursive solution for the subset sum problem /...
    程式設計 發佈於2024-11-07
  • JavaScript 陣列方法:綜合指南
    JavaScript 陣列方法:綜合指南
    数组是 JavaScript 中最基本的数据结构之一。使用数组,您可以在单个变量中存储多个值。 JavaScript 提供了许多内置方法来操作数组,使它们具有令人难以置信的通用性。在这篇文章中,我们将探讨所有内置数组方法以及如何在 JavaScript 项目中有效地使用它们。 核心方...
    程式設計 發佈於2024-11-07
  • 進階 T:依賴參數、推斷聯合以及 Twitter 上的健康互動。
    進階 T:依賴參數、推斷聯合以及 Twitter 上的健康互動。
    每次我用 TypeScript 写成 Foo 时,我都会感受到失败的沉重。 在一种情况下,这种感觉特别强烈:当函数采用的参数取决于哪个 "mode" 处于活动状态时。 通过一些示例代码更清晰: type Provider = "PROVIDER A" | "PR...
    程式設計 發佈於2024-11-07
  • 如何建立人力資源管理解決方案
    如何建立人力資源管理解決方案
    1. Understanding the Basics of Frappe and ERPNext Task 1: Install Frappe and ERPNext Goal: Get a local or cloud-based instance of ERP...
    程式設計 發佈於2024-11-07
  • 從週五黑客到發布:對創建和發布開源專案的思考
    從週五黑客到發布:對創建和發布開源專案的思考
    从周五补丁破解到发布:对创建和发布开源项目的思考 这是针对初学者和中级开发人员的系列的一部分,通过将他们的想法作为开源项目发布或引起兴趣。 这些想法是有偏见的和个人的。计划发布更多文章。通过分享一些思考,我希望能启发你做自己的项目 思考(此) 作为 Java 开发人员学习 Go l...
    程式設計 發佈於2024-11-07
  • 可以使用 constexpr 在編譯時確定字串長度嗎?
    可以使用 constexpr 在編譯時確定字串長度嗎?
    常數表達式最佳化:可以在編譯時確定字串長度嗎? 在最佳化程式碼的過程中,開發人員嘗試計算使用遞​​歸函數在編譯時計算字串文字的長度。此函數逐字元計算字串並傳回長度。 初步觀察:該函數似乎按預期工作,在運行時返回正確的長度並產生表明計算發生在編譯時的彙編程式碼。這就提出了一個問題:是否保證length...
    程式設計 發佈於2024-11-07
  • 在 Raspberry Pi 上執行 Discord 機器人
    在 Raspberry Pi 上執行 Discord 機器人
    Unsplash 上 Daniel Tafjord 的封面照片 我最近完成了一个软件工程训练营,开始研究 LeetCode 的简单问题,并觉得如果我每天都有解决问题的提醒,这将有助于让我负起责任。我决定使用按 24 小时计划运行的不和谐机器人(当然是在我值得信赖的树莓派上)来实现此操作,该机器人将执...
    程式設計 發佈於2024-11-07
  • 解鎖 JavaScript 的隱藏寶石:未充分利用的功能可提高程式碼品質和效能
    解鎖 JavaScript 的隱藏寶石:未充分利用的功能可提高程式碼品質和效能
    In the ever-evolving landscape of web development, JavaScript remains a cornerstone technology powering countless large-scale web applications. While...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3