JavaScript 如何异步生成器函数中抛出错误

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块语法来解决promise。

语法

用户可以按照下面的语法来解决异步函数抛出的错误。

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

在上述的语法中,throwError()是一个返回promises的函数,我们使用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抛出错误)

我们可以从异步函数中返回Promise。在异步函数中拒绝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块来处理错误。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程