程式碼經常會拋出錯誤,處理錯誤更為重要。 JavaScript 也允許使用者使用「throw」關鍵字拋出自訂錯誤。我們可以在 catch 區塊中捕獲錯誤。
我們可以使用 try-catch 語法來捕捉普通函數拋出的錯誤。讓我們透過下面的例子來理解它。
在下面的範例中,我們建立了 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 區塊來解決這個問題。
在下面的範例中, 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>
我們可以從非同步函數傳回承諾。非同步函數中的拒絕承諾就像拋出錯誤一樣。我們在回呼函數中使用了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中文網其他相關文章!