使用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
   }
}

這裡,promise1promise2等等是你想要等待的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中僅執行一個方法。

更新於:2022年12月29日

749 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.