10個必備的 async/await 工具函數

来源:https://www.cnblogs.com/houxianzhou/archive/2023/12/22/17921756.html
-Advertisement-
Play Games

| 當談到非同步編程時,async/await是JavaScript中常用的功能之一。下麵是10個常用的await和async函數示例,以及對它們的代碼用途的解析: 1.非同步獲取數據 async function fetchData() { const response = await fetch(' ...


| 當談到非同步編程時,async/await是JavaScript中常用的功能之一。下麵是10個常用的await和async函數示例,以及對它們的代碼用途的解析:

1.非同步獲取數據

async function fetchData() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return data;
}

 

該函數使用await關鍵字等待非同步請求返回的數據,並將其解析為JSON格式。這樣,我們可以在代碼中以同步的方式處理數據,而無需使用回調函數。

2.非同步執行多個任務

async function performTasks() {
  const task1 = doTask1();
  const task2 = doTask2();
  await Promise.all([task1, task2]);
  console.log('Tasks completed');
}

 

在這個例子中,我們使用await等待多個任務同時完成。Promise.all接收一個包含多個任務的數組,並返回一個新的Promise,直到所有任務都完成才會解析。

3.處理非同步錯誤

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
  } catch (error) {
    console.log('Error:', error);
    throw error;
  }
}

 

在這個示例中,我們使用try/catch塊來捕獲可能出現的非同步錯誤。如果發生錯誤,它將被捕獲並列印出來,然後被重新拋出。

4.順序執行非同步任務

async function performTasks() {
  await doTask1();
  await doTask2();
  console.log('All tasks completed');
}

 

這個函數按照順序執行兩個非同步任務,併在兩個任務都完成後列印一條消息。

5.非同步迴圈

async function processItems(items) {
  for (const item of items) {
    await processItem(item);
  }
  console.log('All items processed');
}

 

在這個例子中,我們使用await在迴圈中處理每個項目。在處理完所有項目後,將列印一條消息。

6.延遲執行

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function delayedTask() {
  console.log('Task started');
  await delay(2000);
  console.log('Task completed');
}

 

delay函數返回一個Promise,經過指定的延遲時間後解析。在delayedTask函數中,我們使用await讓任務在經過2秒的延遲後才繼續執行。

7.條件非同步執行

async function performTask(condition) {
  if (condition) {
    await doTask1();
  } else {
    await doTask2();
  }
  console.log('Task completed');
}

 

在這個示例中,我們使用條件語句來決定要執行的非同步任務。根據條件的不同,將執行不同的任務,併在任務完成後列印一條消息。

8.並行執行非同步任務

async function performTasks() {
  const [result1, result2] = await Promise.all([doTask1(), doTask2()]);
  console.log('Tasks completed:', result1, result2);
}

 

通過使用Promise.all和解構賦值,我們可以並行執行多個非同步任務,併在它們都完成後獲取結果。

9.處理多個併發請求

async function fetchData() {
  const [data1, data2] = await Promise.all([
    fetch('https://api.example.com/data1').then(response => response.json()),
    fetch('https://api.example.com/data2').then(response => response.json())
  ]);
  console.log('Data fetched:', data1, data2);
}

 

在這個示例中,我們使用Promise.all來併發請求多個數據源,並等待它們的響應。一旦所有數據都被解析為JSON格式,我們就可以對其進行處理。

10.鏈式非同步操作

async function performTasks() {
  const result = await doTask1()
    .then(response => doTask2(response))
    .then(result2 => doTask3(result2));
  console.log('Tasks completed:', result);
}

 

在這個示例中,我們使用.then方法將多個非同步任務鏈接在一起。doTask1完成後,它的結果將傳遞給doTask2,然後再將結果傳遞給doTask3。最終的結果將在最後的.then塊中獲取並列印出來。

這些常用的await和async函數示例展示了在非同步編程中如何使用它們。通過使用async/await,我們可以以更具可讀性和簡潔性的方式處理非同步操作,並使代碼結構更清晰。

本文來自博客園,作者:喆星高照,轉載請註明原文鏈接:https://www.cnblogs.com/houxianzhou/p/17921756.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文先是簡單介紹了ML.NET與ML.NET Model Builder,其次基於ML.NET Model Builder構建了一個貓狗識別的機器學習模型實例,最後在.NET項目中集成了它。 ...
  • Linux系統中tar是最常用的打包工具,通過打包工具可以壓縮/解壓 比如常見的壓縮包格式 如下: tar 未壓縮文件 只是做了一個打包而已 tar.gz 使用gzip演算法格式壓縮的壓縮包 tar.bz2 bz2格式壓縮包 tar.xz xz格式壓縮 參數介紹 tar 的參數很多 列出幾個比較常用的 ...
  • ceph-deploy比較適合生產環境,不是用cephadm搭建。相對麻煩一些,但是並不難,細節把握好就行,只是命令多一些而已。 實驗環境 伺服器主機 public網段IP(對外服務) cluster網段IP(集群通信) 角色 deploy 192.168.2.120 用於部署集群、管理集群 cep ...
  • 在經濟社會發展的過程中,銀行的角色愈發重要。隨著金融體系不斷完善,各大銀行之間的交流、合作也變得尤為關鍵。而銀行之間互相識別和通信的一種方式,就是通過聯行號。 聯行號是指銀行間互相識別的一種編碼方式。每個銀行都擁有一個唯一的聯行號,用於區分不同的銀行和分行。有了聯行號,各大銀行之間的交流和轉賬操作就 ...
  • What is State 雖然數據流中的許多操作一次只查看一個單獨的事件(例如事件解析器),但某些操作會記住多個事件的信息(例如視窗運算元)。 這些操作稱為有狀態的(stateful)。 有狀態操作的一些示例: 當應用程式搜索某些事件模式(event patterns)時,狀態(state)將存儲迄 ...
  • 近日,天翼雲大數據平臺順利完成中國信通院無伺服器(Serverless) 架構大數據平臺測試,成為首批通過該測試的單位之一 ...
  • 1、首先選擇一張需要的圖片,通過左側的Resource Manage選擇“+”並選擇Import Drawables 選擇一張圖片 並調整以下兩個內容 這兩個內容的作用借用谷歌官方的Android開發教程的內容: *Android 設備具有不同的屏幕尺寸(手機、平板電腦和電視等),而且這些屏幕也具有 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. 需求分析 實現一個CMS內容管理系統,在後臺進行內容編輯,在官網更新展示內容。 關於後臺的編輯功能,大致分為兩部分:組件拖拽預覽、組件內容編輯實時預覽。 對於組件拖拽預覽,用戶可以在含有各種功能組件的列表中,選擇需要的組件進行拖拽。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...