使用async-await解釋JavaScript中的Promise.any()
在本教程中,我們將學習Promise的any()方法。在JavaScript中,我們可以使用Promise來處理非同步請求。在我們的應用程式中編寫非同步程式碼來獲取資料可以使其更快,因為它可以在不等待資料的情況下執行其他程式碼。
Promise.any() 方法
顧名思義,any()方法將執行任何已完成的Promise。因此,無論哪個Promise先解析,都將由promise.any()方法執行,而其他Promise可能執行也可能不執行。此外,所有被拒絕的Promise都不會被promise.any()方法執行。
語法
使用者可以按照以下語法使用promise.any()方法。
Promise.any(Array_of_promise).then( // handle result )
在上述語法中,我們可以在‘then’塊中處理任何Promise返回的結果。
引數
Array_of_promise – 它包含多個Promise,任何()方法將執行最快解析的那個。
使用Async-await的Promise.any()
JavaScript中的async和await關鍵字用於處理非同步程式碼。async用於函式定義之前,表示該函式是非同步的,並將返回一個Promise。await用於async函式內部,暫停執行,直到指定的Promise完成。
語法
以下是使用JavaScript中async-await的Promise.any()方法的語法
async function example() {
try {
const result = await Promise.any([promise1, promise2, ...]);
} catch (error) {
// handle error
}
}
這裡,promise1,promise2等等是你想要等待的Promise。Promise.any方法返回一個Promise,該Promise使用第一個解析的輸入Promise的值來解析,或者如果所有輸入Promise都被拒絕,則使用所有輸入Promise的拒絕陣列來拒絕。
示例1
在下面的示例中,我們使用Promise()建構函式建立了不同的Promise。我們拒絕了promise_2並解析了其他Promise,並在兩毫秒後解析了promise_3。因此,promise_1將首先成功執行。
在輸出中,我們可以看到any()方法列印promise_1的結果,因為它將首先解析。
<html>
<body>
<h2> Using the Promise.any() Method </h2>
<div id="output"> </div>
<script>
let promise_1 = new Promise((res, rej) => {
res("Resolved promise with time of 0 milliseconds");
});
let promise_2 = new Promise((res, rej) =>
rej("This promise is rejected!")
);
let promise_3 = new Promise((res, rej) => {
setTimeout(() => {
res("Resolved promise with time of 2000 milliseconds");
}, 2000);
});
// resolving the promises
Promise.any([promise_1, promise_2, promise_3]).then((response) => {
document.getElementById("output").innerHTML += response;
});
</script>
</body>
</html>
示例2
在下面的示例中,我們建立了非同步函式getData()。在這裡,我們建立了多個Promise的陣列和使用fetch()方法的Promise。
我們正在從即時API獲取資料。請求陣列包含三個Promise,但在輸出中,我們可以看到結果不是可迭代物件,只包含來自最早解析的Promise的響應。
<html>
<body>
<h2>Using Promise.any() with async-await </h2>
<button onclick="getData()"> Fetch any one promise Data </button>
<div id="output"> </div>
<script>
async function getData() {
try {
// multiple promises
const requests = [
fetch("https://jsonplaceholder.typicode.com/todos/1"),
fetch("https://jsonplaceholder.typicode.com/todos/2"),
fetch("https://jsonplaceholder.typicode.com/todos/3"),
];
const result = await Promise.any(requests);
document.getElementById("output").innerHTML =
"The status of result is " + result.status;
}
catch (error) {
document.getElementById("output").innerHTML = error;
}
}
</script>
</body>
</html>
在這個例子中,getData函式使用Promise.any()建立一個Promise,該Promise由三個fetch Promise中第一個完成的Promise來完成。然後,該函式使用await關鍵字等待Promise完成,並記錄響應文字。如果任何Promise被拒絕,則catch塊將被執行,並將錯誤記錄到控制檯。
使用async和await的Promise.any()是一種以簡潔易讀的方式處理多個Promise的有用方法。它允許你指定一組Promise,並處理第一個完成的Promise,而忽略其他Promise。
在本教程中,我們學習瞭如何使用any() Promise方法。使用any()方法的目標是從已解析的Promise中僅執行一個方法。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP