如何使用Promise.allSettled()?下面這篇文章就來帶大家了解Promise.allSettled(),介紹一下它的使用方法,希望對大家有幫助!
Promise.allSettled()
方法傳回一個在所有給定的promise 都已經fulfilled
或rejected
後的promise
,並帶有一個物件數組,每個物件表示對應的promise 結果。
接著,我們來看看 Promise.allSettled()
是如何運作的。
1. Promise.allSettled()
#Promise.allSettled()
可用於並行執行獨立的非同步操作,並收集這些操作的結果。
此函數接受一個promise
陣列(通常是可迭代物件)作為參數:
const statusesPromise = Promise.allSettled(promises);
當所有的輸入promises
都被fulfilled
或rejected
時,statusesPromise
會解析為一個具有它們狀態的陣列
{ status: 'fulfilled', 值:value }
— 如果對應的promise 已fulfilled
- ##或
{status: 'rejected',reason: reason }
如果對應的promise 已經被
rejected
then 語法提取它們的狀態:
statusesPromise.then(statuses => { statuses; // [{ status: '...', value: '...' }, ...] });或使用
async/await 語法:
const statuses = await statusesPromise; statuses; // [{ status: '...', value: '...' }, ...]
2. 取水果和蔬菜
在深入研究Promise.allSettle() 之前,我們先定義兩個簡單的
helper 函數。
resolveTimeout(value, delay)回傳一個promise ,該promise 在經過
delay 時間後用
value 來實作
function resolveTimeout(value, delay) { return new Promise( resolve => setTimeout(() => resolve(value), delay) ); }第二,
rejectTimeout(reason, delay) - 回傳一個promise,在經過
delay 時間後拒絕
reason。
promise.allsettle()。
2.1 All promises fulfilled
我們同時造訪當地雜貨店的蔬菜和水果。存取每個清單是一個非同步操作:const statusesPromise = Promise.allSettled([ resolveTimeout(['potatoes', 'tomatoes'], 1000), resolveTimeout(['oranges', 'apples'], 1000) ]); // wait... const statuses = await statusesPromise; // after 1 second console.log(statuses); // [ // { status: 'fulfilled', value: ['potatoes', 'tomatoes'] }, // { status: 'fulfilled', value: ['oranges', 'apples'] } // ]
線上範例:https://codesandbox.io/s/all-resolved-yyc0l?file=/src/index.js
Promise.allSettled([...])返回一個promise
statusesPromise,該promise 在1秒內解決,就在蔬菜和水果解決之後,並行地解決。
statusesPromise 解析為一個包含狀態的陣列。
- 陣列的第一項包含有蔬菜的已完成狀態:
status: 'fulfilled', value: ['potatoes', 'tomatoes'] }
- 相同的方式,第二項是水果的完成狀態:
{ status: 'fulfilled', value: ['oranges', 'apples'] }
#2.2一個promise 被拒絕
#想像一下,在雜貨店裡已經沒有水果了。在這種情況下,我們拒絕水果的 promise。promise.allsettle() 在這種情況下如何運作?
const statusesPromise = Promise.allSettled([ resolveTimeout(['potatoes', 'tomatoes'], 1000), rejectTimeout(new Error('Out of fruits!'), 1000) ]); // wait... const statuses = await statusesPromise; // after 1 second console.log(statuses); // [ // { status: 'fulfilled', value: ['potatoes', 'tomatoes'] }, // { status: 'rejected', reason: Error('Out of fruits!') } // ]
線上範例:https://codesandbox.io/s/one -rejected-ij3uo?file=/src/index.js
#Promise.allSettled([...]) 傳回的promise 在
1 秒後來解析為一個狀態數組:
- 數組的第一項,蔬菜
promise
成功解析:
{ status: 'fulfilled', value: [' potatoes', 'tomatoes'] } - 第二項,因為水果promise 被拒絕,所以是一個拒絕狀態:
{ status: 'rejected', reason : Error('Out of fruits') }
statusesPromise仍然會成功解析一個狀態數組。
2.3 所有的 promises 都被 rejected
如果雜貨店裡的蔬菜水果都賣光了怎麼辦?在這種情況下,兩個 promise 都會被拒絕。const statusesPromise = Promise.allSettled([ rejectTimeout(new Error('Out of vegetables!'), 1000), rejectTimeout(new Error('Out of fruits!'), 1000) ]); // wait... const statuses = await statusesPromise; // after 1 second console.log(statuses); // [ // { status: 'rejected', reason: Error('Out of vegetables!') }, // { status: 'rejected', reason: Error('Out of fruits!') } // ]
線上範例:https://codesandbox.io/s/all-rejected-z4jee?file=/src/index.js在這種情況下,
statusesPromise仍然成功地解析為一個狀態數組。然而,該數組包含被拒絕的promise 的狀態。
3.總結
Promise.allSettled(promises)可以並行地運行promise,並將狀態(fulfilled 或reject)收集到一個聚合數組中。
Promise.allSettled(...)在你需要執行平行和獨立的非同步操作並收集所有結果時非常有效,即使某些非同步操作可能失敗。
英文原文網址:https://dmitripavlutin.com/promise-all-settled/
作者:Dmitri Pavlutin
更多程式相關知識,請訪問:編程視頻! !
以上是深入解析Promise.allSettled()的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

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

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3漢化版
中文版,非常好用