【前端】每日一道面試題6:解釋Promise.any和Promise.allSettled的使用場景及區別。

Promise.any() 和 Promise.allSettled() 是 JavaScript 中用于處理異步操作的兩種不同策略的 Promise 組合器,它們的核心區別在于邏輯目標與結果處理方式:


1. Promise.any()

使用場景

  • 需要獲取 首個成功結果(類似競速成功優先)
  • 適用于并行請求多個冗余服務(如 CDN 節點探測、多 API 數據源)
  • 前端加載關鍵資源的優化策略(優先使用最快響應的資源)

行為特征

  • 當輸入數組中 任意一個 Promise 成功(fulfilled),立即 resolve 并返回該結果
  • 所有 Promise 均失敗(rejected),則拋出一個 AggregateError 對象,包含所有錯誤信息
  • 示例代碼:
    Promise.any([fetch('api1'), fetch('api2')]).then(firstSuccess => console.log(firstSuccess)).catch(allErrors => console.error(allErrors.errors));
    

引用依據:(#webpage-1)(Promise.any() 設計邏輯)


2. Promise.allSettled()

使用場景

  • 需要 完整追蹤所有異步操作結果(無論成功或失敗)
  • 批量任務執行后生成匯總報告(如日志上傳、多用戶狀態更新)
  • 避免因單個失敗導致整體流程中斷(如非關鍵性操作集合)

行為特征

  • 等待所有輸入的 Promise 全部完成(無論 fulfilled/rejected)
  • 返回數組包含每個 Promise 的詳細結果對象,結構為 { status: "fulfilled"/"rejected", value/reason: ... }
  • 示例代碼:
    Promise.allSettled([uploadLog(), updateProfile()]).then(results => results.forEach(res => {if (res.status === 'fulfilled') console.log(res.value);else console.error(res.reason);}));
    

引用依據:(#webpage-1)(Promise 狀態追蹤機制)


核心區別對比

特性Promise.any()Promise.allSettled()
完成條件首個成功或全部失敗所有操作完成(無關成功/失敗)
返回值單一成功值或 AggregateError包含所有結果的數組(帶狀態標記)
錯誤處理優先級僅關注首個成功,忽略其他失敗記錄所有成功和失敗詳情
典型應用場景競速優化、冗余請求批量操作審計、非關鍵任務集合

技術實踐中的選擇建議

  • 使用 Promise.any() 時需注意:若依賴多個服務的并行請求,需權衡競速可能導致的不穩定性(如選擇響應最快但數據可能不完整的節點)。
  • 使用 Promise.allSettled() 時可通過結果過濾(.filter())分離成功與失敗案例,實現細粒度控制(如重試機制)。

引用依據:(#webpage-2)(Promise 組合器的異步控制流差異)

如需深入實現原理,可參考來源文檔中關于 Promise 狀態機與事件循環的討論 (#webpage-1) (#webpage-2)。

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

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

相關文章

數據鏈路層__

文章目錄 數據鏈路層基本概念(1)鏈路管理:面向連接的服務(2)幀同步:成幀1、字符計數法2、字符填充法(帶填充的首尾界符法)3、帶填充的首位標志法4、物理層編碼違例法 (3&…

coze智能體后端接入問題:

是否一定要按照coze官方API文檔格式調用? 不一定:以下面代碼為例(給了注釋) app.route(/compare_models, methods[POST]) def compare_models():print("收到 compare_models 請求!") #begin-這一部分代碼作用:從前端接…

如何輕松、安全地管理密碼(新手指南)

很多人會為所有賬戶使用相同、易記的密碼,而且常常多年不換。雖然這樣方便記憶,但安全性非常低。 您可能聽說過一些大型網站的信息泄露事件,同樣的風險也可能存在于您的WordPress網站中。如果有不法分子獲取了訪問權限,您的網站和…

寶塔think PHP8 安裝使用FFmpeg 視頻上傳

寶塔think PHP8 安裝使用FFmpeg 一、 安裝think PHP8二、安裝 FFmpeg1,登錄到寶塔面板。2,進入“軟件商店”。3,搜索“FFmpeg”。4,選擇版本點擊安裝。5,檢查 FFmpeg 是否安裝成功6, 在 ThinkPHP 8 中使用 …

Android 輕松實現 增強版靈活的 滑動式表格視圖

表格視圖組件,支持: 1. 無標題模式:只有數據行也可以正常滑動 2. 兩種滑動模式:固定第一列 或 全部滑動 3. 全面的樣式自定義能力 4. 智能列寬計算 1. 無標題模式支持 設置無標題:調用 setHeaderData(null) 或 …

【Python進階】元類編程

目錄 🌟 前言🏗? 技術背景與價值🩹 當前技術痛點🛠? 解決方案概述👥 目標讀者說明 🧠 一、技術原理剖析📊 核心概念圖解💡 核心作用講解🔧 關鍵技術模塊說明?? 技術選…

DeepSeek模型性能優化:從推理加速到資源調度的全棧實踐

引言 在生產環境中部署DeepSeek模型時,性能優化直接關系到服務質量和運營成本。本文將深入探討從芯片級優化到分布式調度的全棧性能提升方案,涵蓋計算圖優化、內存管理、批處理策略等關鍵技術,并分享在千萬級QPS場景下的實戰經驗,幫助工程團隊突破性能瓶頸,實現成本與效能…

Ctrl+R 運行xxx.exe,發現有如下問題.

CtrlR 運行xxx.exe,發現有如下問題. (1)找不到Qt5Core.all,Qt5Cored.dll,Qt5Gui.dll,Qt5Guid.dll,Qt5Widgets.all,Qt5Widgetsd.dll? (2)之后找不到libwinpthread-1.dll 從這個目錄拷貝相應的庫到運行xx.exe目錄下 方法二:將庫路徑添加到系統PATH環境變量里: 在Path中添加路…

硅基計劃2.0 學習總結 陸 抽象類與接口

文章目錄 一、抽象類1. 定義2. 示例代碼3. 特性 二、接口初識1. 定義2. 命名與語法3. 示例代碼4. 常見特性5. 多接口實現6. 接口的繼承 三、Object類初識1. equals方法2. hascode方法 一、抽象類 1. 定義 請你假設這樣一個場景,我們定義一個人的類,這個…

Linux命令基礎(2)

su和exit命令 可以通過su命令切換到root賬戶 語法:su [-] 用戶名 -符號是可選的,表示是否在切換用戶后加載環境變量,建議帶上 參數:用戶名,表示要切換的用戶,用戶名可以省略,省略表示切換到ro…

C++算法訓練營 Day10 棧與隊列(1)

1.用棧實現隊列 LeetCode:232.用棧實現隊列 請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作(push、pop、peek、empty): 實現 MyQueue 類: void push(int x)將元素x推到隊列的末尾 int pop(…

設計模式域——軟件設計模式全集

摘要 軟件設計模式是軟件工程領域中經過驗證的、可復用的解決方案,旨在解決常見的軟件設計問題。它們是軟件開發經驗的總結,能夠幫助開發人員在設計階段快速找到合適的解決方案,提高代碼的可維護性、可擴展性和可復用性。設計模式主要分為三…

【QT】自定義QWidget標題欄,可拖拽(拖拽時窗體變為normal大小),可最小/大化、關閉(圖文詳情)

目錄 0.背景 1.詳細實現 思路簡介 .h文件 .cpp文件 0.背景 Qt Linux;項目遇到問題,解決后特此記錄 項目需要,個性化的標題欄(是個widget),在傳統的三個按鈕(最大化、最小化、關閉&#xf…

如何用 pnpm patch 給 element-plus 打補丁修復線上 bug(以 2.4.4 修復 PR#15197 為例)

背景 在實際項目開發中,依賴的三方庫(如 element-plus)難免會遇到 bug。有時候官方雖然已經修復,但新版本升級成本高,或者有兼容性風險。這時,給依賴打補丁是最優雅的解決方案之一。 本文以 element-plus…

Spring AI 入門:Java 開發者的生成式 AI 實踐之路

一、Spring AI 簡介 在人工智能技術快速迭代的今天,Spring AI 作為 Spring 生態系統的新生力量,正在成為 Java 開發者擁抱生成式 AI 的最佳選擇。該框架通過模塊化設計實現了與主流 AI 服務(如 OpenAI、Anthropic)的無縫對接&…

優化電腦的磁盤和驅動器提高電腦性能和延長硬盤壽命?

磁盤優化 磁盤清理: 使用系統自帶的磁盤清理工具(如Windows的“磁盤清理”)刪除不必要的文件。清空回收站。刪除臨時文件和緩存。 磁盤碎片整理(針對機械硬盤): 定期進行磁盤碎片整理,以提高文…

EDA斷供危機下的冷思考:中國芯片設計軟件的破局之道優雅草卓伊凡

EDA斷供危機下的冷思考:中國芯片設計軟件的破局之道優雅草卓伊凡 一、EDA是什么?芯片行業的”隱形基石” 1.1 EDA技術解析 EDA(Electronic Design Automation,電子設計自動化)是用于設計和驗證集成電路的軟件工具鏈…

Jpackage

簡介 jpackage - 用于打包自包含 Java 應用程序的工具,是 JDK 14 引入的一個工具。 該工具將 Java 應用程序和 Java 運行時映像作為輸入,并生成包含所有必要依賴項的 Java 應用程序映像。它將能夠生成特定于平臺的格式的本機包,例如包括打包 …

CRM管理軟件的數據可視化功能使用技巧:讓數據驅動決策

在當今數據驅動的商業環境中,CRM管理系統的數據可視化功能已成為企業優化客戶管理、提升銷售效率的核心工具。據企銷客研究顯示,具備優秀可視化能力的CRM系統,用戶決策效率可提升47%。本文將深入解析如何通過數據可視化功能最大化CRM管理軟件…

智慧充電:新能源汽車智慧充電樁的發展前景受哪些因素影響?

全球能源結構轉型與碳中和目標的推進,新能源汽車產業迎來爆發式增長,而智慧充電樁作為其核心基礎設施,發展前景備受關注。智慧充電不僅關乎用戶充電體驗的優化,更是電網平衡、能源效率提升的關鍵環節。 然而,其發展并…