Node.js異步編程——async/await實現

一、async/await基礎語法

在Node.Js編程中,async關鍵字用于定義異步函數,這個異步函數執行完會返回一個Promise對象,異步函數的內部可以使用await關鍵字來暫停當前代碼的繼續執行,直到Promise操作完成。

在用法上,async關鍵字主要用于聲明一個異步函數,await關鍵字主要用于等待Promise操作的返回結果,若await等待的Promise操作被rejected,此時會拋出異常,需要對異常采用"try/catch"處理。

async/await的語法格式: 

async function() {await [Asynchronous Action]}

async/await代碼樣例: 

1.等待Promise執行結果,并利用try/catch捕獲異常

//定義異步函數
async function fetchData() {try {//異步操作,從API獲取數據//使用await等待函數執行完成const response = await fetch('https://test.com/');const data = await response.json();console.log('The data is:', data);} catch (error) {console.error('Err occured:', error);}
}//調用異步函數
fetchData();

2.async時序測試

async function async1() {console.log('async1 start');await async2();console.log('async1 end');    }
async function async2() {console.log('async2 finish');        }
console.log('script start');  
async1();
console.log('script end');

運行結果:

script start
async1 start
async2 finish
script end
async1 end

二、async/await和Promise的關系

1.async/await的語法是基于Promise來實現的。

2.async/await對Promise進行了封裝,異步編程時避免了繁瑣的Promise鏈式調用。

3.async/await的設計是為了簡化Promise異步編程的實現方式,代碼可讀性更強。

4.async/await基于Promise增加了對執行步驟的控制,可以通過await來暫停/恢復執行。

基于Promise實現的異步操作:

fetchData().then(data => process(data)).then(result => save(result)).catch(err => console.error(err));

基于async/await實現的異步操作:

try {const data = await fetchData();const result = await process(data);await save(result);
} catch (err) {console.error(err);
}

以上代碼實現中,基于".then"實現的連續操作會讓每一個步驟立即執行,基于await實現的連續操作可以讓當前步驟暫停等待。

以下兩段代碼的實現效果相同: 

Demo

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920000.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搭建一個簡單的Agent

準備本案例使用deepseek,登錄deepseek官網,登錄賬號,充值幾塊錢,然后創建Api key可以創建虛擬環境,python版本最好是3.12,以下是文件目錄。test文件夾中,放一些txt文件做測試,main.p…

uv,下一代Python包管理工具

什么是uv uv(Universal Virtual)是由Astral團隊(知名Python工具Ruff的開發者)推出的下一代Python包管理工具,使用Rust編寫。它集成了包管理、虛擬環境、依賴解析、Python版本控制等功能,它聚焦于三個關鍵點…

單片機的輸出模式推挽和開漏如何選擇呢?

推挽和開漏是單片機的輸出模式,屬于I/O口配置的常見類型。開漏(Open-Drain)和推挽(Push-Pull)是兩種根本不同的輸出電路結構,理解它們的區別是正確使用任何單片機(包括51和STM32)GPI…

java18學習筆記-Simple Web Server

408:Simple Web Server Python、Ruby、PHP、Erlang 和許多其他平臺提供從命令行運行的開箱即用服務器。這種現有的替代方案表明了對此類工具的公認需求。 提供一個命令行工具來啟動僅提供靜態文件的最小web服務器。沒有CGI或類似servlet的功能可用。該工具將用于原型設計、即…

深度解析Atlassian 團隊協作套件(Jira、Confluence、Loom、Rovo)如何賦能全球分布式團隊協作

無窮無盡的聊天記錄、混亂不堪的文檔、反饋信息分散在各個不同時區……在全球分布式團隊中開展真正的高效協作,就像是一場不可能完成的任務。 為什么會這樣?因為即使是最聰明的團隊,也會遇到類似的障礙: 割裂的工作流&#xff1a…

理解AI 智能體:智能體架構

1. 引言 智能體架構(agent architecture)是一份藍圖,它定義了AI智能體各組件的組織方式和交互機制,使智能體能夠感知環境、進行推理并采取行動。本質上,它就像是智能體的數字大腦——整合了“眼睛”(傳感器…

Spring Cloud系列—SkyWalking鏈路追蹤

上篇文章: Spring Cloud系列—Seata分布式事務解決方案TCC模式和Saga模式https://blog.csdn.net/sniper_fandc/article/details/149947829?fromshareblogdetail&sharetypeblogdetail&sharerId149947829&sharereferPC&sharesourcesniper_fandc&…

機器人領域的算法研發

研究生期間學習大模型,可投遞機器人領域的算法研發、技術支持等相關崗位,以下是具體推薦: AI算法工程師(大模型方向-機器人應用):主要負責大模型開發與優化,如模型預訓練、調優及訓練效率提升等…

深度學習入門:神經網絡

文章目錄一、深度學習基礎認知二、神經網絡核心構造解析2.1 神經元的基本原理2.2 感知器:最簡單的神經網絡2.3 多層感知器:引入隱藏層解決非線性問題2.3.1 多層感知器的結構特點2.3.2 偏置節點的作用2.3.3 多層感知器的計算過程三、神經網絡訓練核心方法…

mysql的索引有哪些?

1. 主鍵索引(PRIMARY KEY)主鍵索引通常在創建表時定義,確保字段唯一且非空:-- 建表時直接定義主鍵 CREATE TABLE users (id INT NOT NULL,name VARCHAR(50),PRIMARY KEY (id) -- 單字段主鍵 );-- 復合主鍵(多字段組合…

【計算機視覺與深度學習實戰】08基于DCT、DFT和DWT的圖像變換處理系統設計與實現(有完整代碼python3.13可直接粘貼使用)

1. 引言 數字圖像處理作為計算機視覺和信號處理領域的重要分支,在過去幾十年中得到了快速發展。圖像變換技術作為數字圖像處理的核心技術之一,為圖像壓縮、特征提取、去噪和增強等應用提供了強有力的數學工具。離散余弦變換(Discrete Cosine Transform, DCT)、離散傅里葉變…

使用Python實現DLT645-2007智能電表協議

文章目錄🌴通訊支持🌴 功能完成情況服務端架構設計一、核心模塊劃分二、數據層定義三、協議解析層四、通信業務層(以DLT645服務端為例)五、通信層(以TCP為例)使用例子🌴通訊支持 功能狀態TCP客…

未來已來:基于IPv6單棧隔離架構的安全互聯實踐報告

未來已來:基于IPv6單棧隔離架構的安全互聯實踐報告 報告摘要 隨著IPv4地址資源徹底枯竭,全球網絡基礎設施正加速向IPv6單棧(IPv6-Only)演進。傳統“IPv4為主、IPv6為輔”的雙棧模式已無法滿足數字化轉型對海量地址、端到端連接與原…

Ubuntu24.04 安裝 Zabbix

Ubuntu24.04 安裝 Zabbix 環境: 軟件版本Ubuntu24.04.3Nginx1.24.0MySQL8.4.6PHP8.3.6phpMyAdmin5.2.2Zabbix7.4.1 LNMP 1. 更新本地軟件包索引并升級已安裝軟件 更新可用軟件包列表 把已安裝的軟件升級到最新版 安裝常用工具 sudo apt update && sud…

【動手學深度學習】6.2. 圖像卷積

目錄6.2. 圖像卷積1)互相關運算2)卷積層3)圖像中目標的邊緣檢測4)學習卷積核5)互相關與卷積6)特征映射和感受野7)小結. 6.2. 圖像卷積 卷積神經網絡的設計是用于探索圖像數據,本節…

游戲引擎中的Billboard技術

一.視覺公告板為解決場景中Mesh網格面數過多問題,使用2D平面Mesh替換為3D平面Mesh的技術即為Billboard技術.常用于場景中植被,樹葉,粒子系統等對面數有要求的場景.二.Billboard著色器實現著色器輸入參數:攝像機坐標,網格坐標,攝像機觀察方向著色器輸出:實際2D平面隨視角不變

vue-admin-template權限管理

在基于 vue-admin-template 實現權限管理時,通常需要結合角色權限模型和動態路由機制,以滿足不同用戶角色對頁面訪問權限的控制需求。分為路由頁面權限和按鈕權限:下面是具體實現思路的思維導圖和具體代碼流程:0.實現邏輯思維導圖…

微信小程序,事件總線(Event Bus) 實現

1、util.js文件/*** 事件總線*/ function createEventBus() {// 私有事件存儲對象,通過閉包保持私有性const events {};return {/*** 監聽事件,只執行一次* param {string} eventName - 事件名稱* param {Function} callback - 回調函數*/once(eventNam…

OpenCV結構光三維重建類cv::structured_light::GrayCodePattern

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::structured_light::GrayCodePattern 是 OpenCV 庫中用于結構光三維重建 的一個類,屬于 OpenCV 的 structured_light 模塊。 它用于…

變頻器實習DAY35 引腳電平測試 退耦電阻

目錄變頻器實習DAY35一、工作內容1.1 硬性平臺RO7測試二、學習內容2.1 退耦電阻核心原理:2大特性抑制干擾四大關鍵作用選型:4個核心參數典型應用場景四大常見誤區附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器實習DAY35 一、工作內容 1.1 硬性…