首頁  >  文章  >  web前端  >  如何在 JavaScript 中的非同步生成器函數中引發錯誤?

如何在 JavaScript 中的非同步生成器函數中引發錯誤?

WBOY
WBOY轉載
2023-08-29 08:49:021160瀏覽

如何在 JavaScript 中的异步生成器函数中引发错误?

程式碼經常會拋出錯誤,處理錯誤更為重要。 JavaScript 也允許使用者使用「throw」關鍵字拋出自訂錯誤。我們可以在 catch 區塊中捕獲錯誤。

我們可以使用 try-catch 語法來捕捉普通函數拋出的錯誤。讓我們透過下面的例子來理解它。

範例 1(在正規函數中拋出錯誤)

在下面的範例中,我們建立了 throwError() 常規函數,該函數使用 throw 關鍵字拋出帶有自訂錯誤訊息的錯誤。我們已經執行了 try 區塊內的函數。如果函數拋出任何錯誤,控制項將轉到 catch 區塊,這就是我們偵測錯誤的方式。

<html>
<body>
   <h3> Using the throw keyword to throw an error from the normal function </h3>
   <div id = "content"> </div>
   <script>
      let content = document.getElementById('content');
      // throw error from normal function
      function throwError() {
         throw new Error('Error from normal function');
      }
      try {
         throwError();
      } catch (e) {
         content.innerHTML = e;
      }
   </script>
</body>
</html>

如果我們將 throwError() 函數設為非同步,它將產生另一個錯誤,因為我們可以使用 try-catch 區塊來處理同步函數拋出的錯誤。

要解決該問題,使用者必須使用 then-catch 區塊語法來解決承諾。

文法

使用者可以按照以下語法來解決非同步函數拋出的錯誤。

throwError().then((res) => {
   // print content
}).catch((err) => {
   // print error message
})

在上面的語法中, throwError() 是一個傳回 Promise 的函數,我們使用 then 和 catch 區塊來解決這個問題。

範例 2(非同步函數引發錯誤)

在下面的範例中, throwError() 函數是一個非同步函數,因為我們在 function 關鍵字之前加入了「async」關鍵字。我們從非同步函數中拋出了錯誤,就像從常規函數中拋出錯誤一樣。

之後,我們使用 then 和 catch 區塊處理 Promise。在輸出中,使用者可以觀察到,當非同步函數拋出錯誤時,控制權會轉到 catch 區塊。

<html>
<body>
   <h3> Using the <i> throw </i> keyword to throw an error from the async function </h3>
   <div id = "content"> </div>
   <script>
      let content = document.getElementById('content');
      // throw error from normal function
      async function throwError() {
         throw new Error('Error from Async function');
      }
      throwError().then((res) => {
         content.innerHTML = res;
      }).catch((err) => {
         content.innerHTML = err;
      })
   </script>
</body>
</html>

範例 3(透過在非同步函數中拒絕 Promise 拋出錯誤)

我們可以從非同步函數傳回承諾。非同步函數中的拒絕承諾就像拋出錯誤一樣。我們在回呼函數中使用了reject()方法來拒絕promise。

‘then-catch’區塊用於解析函數傳回的promise,使用者可以看到控制項轉到catch區塊。

<html>
<body>
   <h3> Using the <i> reject </i> method to throw an error from the async function </h3>
   <div id = "content"> </div>
   <script>
      let content = document.getElementById('content');
      // throw error from normal function
      async function throwError() {
         return new Promise((resolve, reject) => {
            reject("This promise is rejected from the async function." );
         });
      }
      throwError().then((res) => {
         content.innerHTML = res;
      }).catch((err) => {
         content.innerHTML = err;
      })
   </script>
</body>
</html>

使用者學會如何從非同步函數中拋出錯誤。使用者可以像常規函數一樣使用“throw”關鍵字來拋出錯誤。使用者需要使用「then-catch」區塊來處理錯誤,因為非同步函數傳回 Promise,而不是使用 try-catch 區塊來處理。

以上是如何在 JavaScript 中的非同步生成器函數中引發錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除