JavaScript中的Promise是什麼?


在JavaScript中,Promise可以用來簡化非同步程式設計,使處理非同步操作(如I/O操作或與外部系統或機器通訊)更容易。Promise是表示非同步操作最終完成或失敗及其結果值的物件。它們提供了一種簡單的方法來處理非同步程式碼,使我們能夠編寫更清晰、更易讀的程式碼。在本教程中,我們將瞭解JavaScript中的Promise是什麼,以及如何使用它們將非同步程式設計行為融入我們的控制流。

Promise有三種狀態:

  • 等待中 - Promise在被resolve或reject之前的初始狀態。

  • 已完成 - 表示非同步操作成功完成的狀態,產生一個值。

  • 已拒絕 - 表示非同步操作失敗的狀態,產生一個錯誤。

讓我們來看一些例子來更好地理解這個概念:

示例1 - 使用.then/.catch語法

在這個例子中,我們將:

  • 建立一個返回Promise的performAsyncTask()函式。

  • 在Promise的主體中,我們將建立一個非同步任務,如果數字大於0.5,則用隨機數解析Promise;否則,用錯誤訊息拒絕Promise。

檔名 - index.html

<html>
<head>
   <title>What are Promises in JavaScript?</title>
   <script>
      function performAsyncTask() {
         return new Promise((resolve, reject) => {
            setTimeout(() => {
               const randomNumber = Math.random();
               if (randomNumber > 0.5) {
                  resolve(randomNumber);
               } else {
                  reject("Failed to perform the task.");
               }
            }, 2000);
         });
      }

      performAsyncTask()
      .then((result) => {
         console.log("Task completed successfully. Result: " + result);
      })
      .catch((error) => {
         console.log("Task failed. Error: " + error);
      });
   </script>
</head>
<body>
   <h1>What are Promises in JavaScript?</h1>
</body>
</html>

輸出

結果將類似於下面的圖片。

示例2 - 使用async/await語法

在這個例子中,我們將:

  • 建立一個返回Promise的fetchData()函式。

  • 在Promise的主體中,我們將建立一個非同步任務,在2秒延遲後,用包含示例資料的物件解析Promise。

檔名 - index.html

<html>
<head>
   <title>What are Promises in JavaScript?</title>
   <script>
      function fetchData() {
         return new Promise((resolve) => {
            setTimeout(() => {
               resolve({ data: "Sample data" });
            }, 2000);
         });
      }

      async function getData() {
         try {
            const result = await fetchData();
            console.log("Data: ", result.data);
         } catch (error) {
            console.log("Error: ", error);
         }
      }

      getData();
   </script>
</head>
<body>
   <h1>What are Promises in JavaScript?</h1>
</body>
</html>

輸出

結果將類似於下面的圖片。

結論

總而言之,Promise是JavaScript中一個重要的特性,它簡化了非同步程式設計。它們是表示非同步操作最終完成或失敗及其結果值的物件。我們學習了使用不同方法的JavaScript中的Promise,並透過一些例子進行了說明。

更新於:2023年8月16日

666 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

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