請原諒我的拼字錯誤和文法錯誤,我還在學習中。 ?
什麼是承諾?
Promise 是 JavaScript 中處理非同步操作的一種方式。它們代表了一種現在可能可用、將來可用、或永遠不會可用的值。 Promise 有三種狀態:待處理、完成和拒絕。
承諾的類型
Pending:promise 的初始狀態。代表操作仍在進行中,尚未完成。
Fulfilled:操作成功完成時 Promise 的狀態。 Promise 具有價值,可以使用。
Rejected:操作失敗時 Promise 的狀態。 Promise 是有失敗原因的,可以使用 catch 方法來處理。
為什麼承諾很重要?
- Promise 有助於編寫更清晰、更易讀的非同步程式碼。
- 它們提供了一種以更結構化的方式處理非同步操作的方法。
- Promise 可以連結在一起以順序執行多個非同步操作。
- 無論是取得資料、處理多個任務或爭取快速結果,Promise 在現代 JavaScript 中都是必不可少的。
1. 簡單的承諾
const promise = new Promise((resolve, reject) => { // Imagine fetching user data from an API const user = { name: "Aasim Ashraf", age: 21, }; user ? resolve(user) : reject("User not found"); }); promise .then((user) => console.log(user)) .catch((error) => console.log(error));
通常用於 API 呼叫或非同步任務的解析或拒絕的 Promise。
- 何時使用: 對於單一非同步操作,例如從 API 取得資料。
- 優點:在一個區塊中乾淨地處理成功和失敗。
2. Promise.all 多重操作
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
等待所有的promise都解決,如果一個失敗,整個鏈就會失敗。最適合需要一起解決的多個非同步任務。
- 何時使用: 對於彼此不依賴的多個非同步操作。
- 優點:一次獲取多個資料並一起處理它們。
- 缺點:一個失敗,全部失敗。
如果 Promise.all 中的一個 Promise 失敗會發生什麼?
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
Promise.all 的問題是,如果一個 Promise 失敗,整個鏈就會失敗。為了避免這種情況,你可以使用 Promise.allSettled。
3.Promise.allSettled
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.allSettled([fetchUser, fetchPosts]) .then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { console.log("User Data:", result.value); } else { console.log("Error:", result.reason); } }); });
Promise.allSettled 等待所有 Promise 解決,無論它們是解決還是拒絕。它傳回具有狀態和值或原因的物件數組。
- 何時使用:當您想知道所有結果,甚至失敗時。
- 優點:一次獲取多個資料並一起處理它們。
- 缺點:如果失敗,它不會停止鏈條
4. Promise.race 最快結果
const fast = new Promise(resolve => setTimeout(resolve, 1000, "Fast")); const slow = new Promise(resolve => setTimeout(resolve, 2000, "Slow")); Promise.race([fast, slow]) .then((result) => { console.log(result); }) .catch((error) => console.log(error));
傳回第一個承諾結算的結果,無論是解決還是拒絕。當您需要速度時很有用,例如載入第一個可用的回應。
- 何時使用:當速度比等待所有結果更重要時。
- 限制:如果最快的承諾失敗,您可能會收到錯誤。
如果 Promise.race 中的 Promise 失敗怎麼辦?
const error = new Promise((resolve) => { setTimeout(() => resolve("Error"), 1000); }); const success = new Promise((resolve) => { setTimeout(() => resolve("Success"), 2000); }); Promise.race([error, success]) .then((result) => { console.log(result); }) .catch((error) => console.log("First Rejected",error));
如果第一個承諾失敗,則整個鏈都會失敗。為了避免這種情況,你可以使用 Promise.any。
5. Promise.any 第一個成功結果
const promise1 = Promise.reject("Error 1"); const promise2 = new Promise(resolve => setTimeout(resolve, 3000, "Promise 2")); Promise.any([promise1, promise2]) .then((result) => { console.log("First Success",result); }) .catch((error) => console.log("All Rejected",error));
當任何一個 Promise 解決時就解決。忽略所有拒絕,直到所有承諾都被拒絕。當您需要第一個成功的結果而不考慮其他結果時很有用。
- 何時使用:當您需要第一個成功的結果時,無論其餘的承諾如何。
- 限制:如果所有promise都被拒絕,則會拋出錯誤。
回顧
- 簡單 Promise: 對於單一非同步操作,例如從 API 取得資料。
- Promise.all: 用於多個互不依賴的非同步操作。
- Promise.allSettled:當你想知道所有結果,甚至失敗時。
- Promise.race:當速度比等待所有結果更重要時。
- Promise.any:當你需要第一個成功的結果時,無論其餘的承諾如何。
最後的想法
- 選擇正確的 Promise 類型是高效非同步程式設計的關鍵。
- 使用最適合您用例的 Promise:速度、多項操作或處理所有結果。
以上是JavaScript 中的 Promise 類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

本文系列在2017年中期進行了最新信息和新示例。 在此JSON示例中,我們將研究如何使用JSON格式將簡單值存儲在文件中。 使用鍵值對符號,我們可以存儲任何類型的

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

核心要點 JavaScript 中的 this 通常指代“擁有”該方法的對象,但具體取決於函數的調用方式。 沒有當前對象時,this 指代全局對象。在 Web 瀏覽器中,它由 window 表示。 調用函數時,this 保持全局對象;但調用對象構造函數或其任何方法時,this 指代對象的實例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。這些方法使用給定的 this 值和參數調用函數。 JavaScript 是一門優秀的編程語言。幾年前,這句話可

jQuery是一個很棒的JavaScript框架。但是,與任何圖書館一樣,有時有必要在引擎蓋下發現發生了什麼。也許是因為您正在追踪一個錯誤,或者只是對jQuery如何實現特定UI感到好奇

該帖子編寫了有用的作弊表,參考指南,快速食譜以及用於Android,BlackBerry和iPhone應用程序開發的代碼片段。 沒有開發人員應該沒有他們! 觸摸手勢參考指南(PDF)是Desig的寶貴資源


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

記事本++7.3.1
好用且免費的程式碼編輯器